Home  >  Article  >  Backend Development  >  基本词匹配项目深入研究-过滤器的引入

基本词匹配项目深入研究-过滤器的引入

WBOY
WBOYOriginal
2016-06-13 12:12:27900browse

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

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

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

前言

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

问题的前因

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

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

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

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

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

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

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

解决方案

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

设计方案

   image

    升级版果断多姿多彩。

    类图:

    image

  

代码方案

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

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

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

 

      3. 新增Filter代码:

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

       

总结

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

1楼DM张朋飞
表示要是jsp版本的就好了
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn