关键词匹配项目深刻研究-过滤器的引入

关键词匹配项目深刻研究(一) - 过滤器的引入php

在开始看本篇时,请先了解 手把手教你作关键词匹配项目(搜索引擎)---- 第一天 ~ 手把手教你作关键词匹配项目(搜索引擎)---- 第二十二天html

前言算法

     接上回说到,小帅帅把完成后的代码,以及测试结果给出来后,于老大也没多说什么,就被要求上线了,缘由很简单:你们都想有点贡献,福利也是少不了的,后期遇到的事情后期再来升级,那餐饭,小帅帅很happy,很知足,固然同行的有小丁丁,于老大,王总监。数据库

问题的前因app

       随着项目的运行,采集关键词的应用日益普遍,忽然有一天小丁丁跑来找到小帅帅,小帅帅固然很欢喜,可是听到后面的对话凉了一大截。测试

      “小帅帅,你看,这些词怎么有&,?,%,好多乱七八糟的词都有了,这些词都不太合适用,帮帮忙看看怎么去掉咯。”小丁丁的眼神也够厉害的,盯得小帅帅直哆嗦。this

      “大姐,好咯,我先去瞧瞧,这件事包在我身上,到时解决了跟你说声”。搜索引擎

       小帅帅回去查了下,发现数据库里面好多这种古怪的词,小帅帅慌了,只好又去找到于老大。spa

       “如今词库关键词里面包含&,?,%这种词不少,并且根据匹配度算法来算的话,这些词都是可用的,咱们怎么办?”。设计

       于老大听了小帅帅的解说,想出了一个方案,咱们控制下这些关键词咯,反正这些关键词业务也不使用,咱们就不要让他入库了,既能够减小关键词库的量,又能保证关键词的可利用率高。

        小帅帅一听,于老大就是不同,可望不可即。

解决方案

         增长一个功能,控制词源入库,符合规则的准入,不符合规则的丢弃--过滤器的功能。

设计方案

   image

    升级版果断多姿多彩。

    类图:

    image

  

代码方案

      1. InputSource、FileSource、TaobaoHotsSource代码不变。

      2. Source代码新增过滤代码,以下:

 1 class Source {
 2 
 3     public $keywords;
 4 
 5     public function run() {
 6 
 7         foreach ($this->keywords as $word) {
 8             # code...
 9             if(Filter::is($word)) continue;
10             
11             $keyword = new Keyword();
12             $keyword->word = $word;
13             $keyword->save();
14         }
15     }
16 
17 }

 

      3. 新增Filter代码:

 1 <?php
 2 
 3 #@Filename: filter/Filter.php
 4 #@Author: oShine
 5 
 6 class Filter {
 7 
 8     private static $filterWords = array("*","?","%",".","&");
 9 
10     public static function is($word){
11         $pattern = "/(".implode("|", self::$filterWords).")/";
12         return preg_match(pattern, $word);
13     }
14 
15 }

       

总结

     良好的代码结构,新增移除功能都很是简单,工做效率提高了。小帅帅深深的爱上了这份工做。

相关文章
相关标签/搜索