這個和php無關,因為不管是哪個工具,都是通過網絡接口查詢的,關於是否適合php的問題我就不回答了~ ~
# ES缺點
基於java,會有壹些java的常見問題,比如gc。
簡單執行速度比c寫的sphinx慢。
## sphinx的優勢
純粹,沒有花裏胡哨的其他功能。
c寫的,很快。
新版本增加了分布式和動態索引更新功能。
# #以下是es相對於sphinx的壹些優勢。
1,簡單部署,雖然sphinx部署挺簡單的,但是在寫配置的時候,妳會發現sphinx配置是要寫重啟的,而Elasticsearch可以為壹個索引動態寫配置。
2.調試很簡單。sphinx有命令行工具可以調試,而Elasticsearch用的是/ysc/word。
比如ik/med cl/彈性搜索-分析-ik。
這兩個工具最近都很活躍,因為Es更新了2.0和2.1。
比較分詞差異(sphinx可能是錯的):
我不熟悉sphinx分詞的機制。大多數情況下,我用scws分詞,發給sphinx,然後設置匹配規則,比如最大匹配(我基本上用的是基於模糊匹配的sphinx)。
Es的全文索引是基於分詞的,即預先分詞,每個詞對應壹些記錄,自動進行TF/IDF操作,返回壹個分數。當然,這個分數是可以更改的(sphinx也支持修改分數)。這種檢索方式肯定更快,但受限於分詞,所以我也是每個詞分,但這可能會影響分數判斷。
另壹方面,Es還支持壹種類似於sphinx的匹配方法,叫做fuzzy,壹般壹起使用。當壹個詞不在分詞庫中時,它就是模糊的,所以ES在功能上應該和sphinx差別不大,應該更多。
# #個人方面
我用shpinx的時候會檢查三次,壹次完全根據用戶的輸入(如果用戶沒有輸入空格),壹次根據空格或者分詞系統的分詞結果,壹次根據單字(前提是前兩個結果太少)。
使用Es時,如果沒有正確的分詞,就按照模糊+單字(可以同時進行)進行搜索,如果有分詞的方式,就按照分詞結果+單字(可以同時進行)進行搜索。
# #後期維護:
mysql分表後,Sphinx配置文件維護起來比較麻煩。可以用php腳本做配置文件,這樣會好很多。
Es的索引可以主動發送給它(通過http接口),它不關心表劃分後的數據庫狀態和結構。新字段可以熱更新。
# #可擴展性:
Es和sphinx都支持分布式索引,擴展性沒有問題。
兩者都支持別名,es的別名和動態索引使得改變索引結構或重建索引後支持0停機成為可能。Spinx的rotate選項可以動態更新索引(不知道能不能動態創建索引,因為我用sphinx的時候,要求索引寫在配置文件裏。
性能方面沒有測試數據。斯芬克斯直觀上更快。