當前位置:成語大全網 - 書法字典 - Sphinx或solr更適合php站點。

Sphinx或solr更適合php站點。

用Elasticsearch,和solr壹樣,用lucene。

這個和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的時候,要求索引寫在配置文件裏。

性能方面沒有測試數據。斯芬克斯直觀上更快。