關鍵字匹配項目深入研究(一) - 過濾器的引入
在開始看本篇時,請先了解手把手教你做關鍵字匹配項目(搜尋引擎)---- 第一天~ 手把手教你做關鍵字匹配項目(搜尋引擎)---- 第二十二天
前言
接上回說到,小帥帥把完成後的代碼,以及測試結果給出來後,於老大也沒多說什麼,就被要求上線了,原因很簡單:大家都想有點貢獻,福利也是少不了的,後期遇到的事情後期再來升級,那餐飯,小帥帥很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教程有興趣的朋友有所幫助。