首页  >  文章  >  后端开发  >  关键词匹配项目深入研究-过滤器的引入

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

WBOY
WBOY原创
2016-08-08 09:32:03970浏览

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

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

前言

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

问题的前因

       随着项目的运行,采集关键词的应用日益广泛,突然有一天小丁丁跑来找到小帅帅,小帅帅当然很欢喜,但是听到后面的对话凉了一大截。

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

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

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

       “现在词库关键词里面包含&,?,%这种词很多,而且根据匹配度算法来算的话,这些词都是可用的,我们怎么办?”。

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

        小帅帅一听,于老大就是不一样,望尘莫及。

解决方案

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

设计方案

  

    升级版果断多姿多彩。

    类图:

   

代码方案

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

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

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

      3. 新增Filter代码:

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

       

总结

     良好的代码结构,新增移除功能都非常简单,工作效率提升了。小帅帅深深的爱上了这份工作。

以上就介绍了关键词匹配项目深入研究-过滤器的引入,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn