搜索基本上是網站或者 app 必備的功能了;
可是同樣是搜索;
實現起來也都能是尼古拉斯凱奇和尼古拉斯趙四間的差距;
一般的搜索是 sql 模糊查詢級別的;
比如說文章中有 php是世界上最好的語言 這句話;
如果我們用 sql 的 like 的 % 模糊查詢的話;
搜索詞必須要連貫切一字不差;
可以搜 like 'php是%' 也可以搜 like '%最好的語言' 或者 like '%世界上最好%' ;
然鵝要是搜 "世界最好語言" 就搜不到了;
這他喵的就尷尬了;
作為被谷歌百度甚至是淘寶慣壞了廣大用戶們;
怎麼可能會那麼嚴謹的正好一字不差且順序不亂的輸入關鍵詞;
這時候有個叫 全文搜索 需要了解一下了;
簡單的來說全文搜索的原理就是把內容按關鍵字給拆分了;
比如說上面這句話拆成 php 、世界 、最好 、 語言 ;
然後把這些關鍵字和內容關聯索引;
再複雜點的就再加上同義詞拼音什麼的噼裡啪啦;
當用戶搜索的時候把用戶輸入的內容也拆分了來和索引匹配計算權重;
如果要實現全文搜索;
那最佳的選擇就是 Elasticsearch 了;
github 、 Stack Overflow 、維基百科、 微軟、 IBM 等等用了都說好;
Elasticsearch 是基於 Lucene ;
基於 Lucene 的還有一個 Solr ;
另外還有毛熊們開發的 Sphinx 以及國產的 xunsearch ;
至於這麼多怎麼選擇的問題就簡單了;
從小老師就教我們3短1長選最長;
本文就作為一個 key ;
至於它們之間詳細的優缺點;
童鞋們可以自行尋找 value 了;
以上這些都是需要獨立安裝的搜索
小項目用起來就有點牛刀殺雞的趕腳;
作為世界上最好的語言;
我們大 php 還有個可以不依賴第三方自己就可以實現全文搜索擴展包;
TNTSearch
英文實現全文搜索相對來說容易些;
因為可以容易的直接按空格來把句子拆分成關鍵字;
而中文就比較慘了;
非國產的全文搜索軟件默認都是把中文按字拆的;
它並不懂 世界 、最好 、 語言 這些是詞語;
是要放在一起的不能被傻愣愣的給拆成單個字;
這時候就需要中文分詞了;
中文分詞就是會智能點的按中文的詞語來拆分內容;
這裡點名可以作為 Elasticsearch 中文分詞插件的 IK Analyzer ;
以及作為 TNTSearch 中文分詞的 jieba-php ;
我選擇了2套組合;
Elasticsearch + IK Analyzer 完全獨立;
TNTSearch + jieba-php 完全基於 php ;
沒錯下面就是要寫這兩套組合;
不過不是今天;
一寫文章就凌晨;
90後已經開始保溫杯枸杞養生了;
作為00後我也不能熬夜太晚;
有興趣的可以自己先研究;
我博客程序已經集成了 TNTSearch + jieba-php ;
可以作為研究時的參考;
我先回被窩了;
![全文搜索和中文分詞](http://p2.ttnews.xyz/loading.gif)
閱讀更多 三木益達 的文章