首頁  >  文章  >  後端開發  >  關鍵字匹配項目深入研究-過濾器的引入

關鍵字匹配項目深入研究-過濾器的引入

WBOY
WBOY原創
2016-08-08 09:32:03933瀏覽

關鍵字匹配項目深入研究(一) - 過濾器的引入

在開始看本篇時,請先了解手把手教你做關鍵字匹配項目(搜尋引擎)---- 第一天~ 手把手教你做關鍵字匹配項目(搜尋引擎)---- 第二十二天

前言

     接上回說到,小帥帥把完成後的代碼,以及測試結果給出來後,於老大也沒多說什麼,就被要求上線了,原因很簡單:大家都想有點貢獻,福利也是少不了的,後期遇到的事情後期再來升級,那餐飯,小帥帥很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