sphinx完整掃瞄的啟用條件不只有兩個

2021-09-02 19:36:28 字數 1172 閱讀 3777

sphinx版本:1.10bate

在sphinx的官方文件中有註明:sphinx對於關鍵字/詞有如下可選的匹配模式:

  sph_match_all, 匹配所有查詢詞(預設模式)

  sph_match_any, 匹配查詢詞中的任意乙個

  sph_match_phrase, 將整個查詢看作乙個片語,要求按順序完整匹配

  sph_match_boolean, 將查詢看作乙個布林表示式

  sph_match_extended, 將查詢看作乙個sphinx內部查詢語言的表示式

還有乙個特殊的「完整掃瞄」模式,當如下條件滿足時,該模式被自動啟用:

1. 查詢串是空的(即長度為零)

2. docinfo 儲存方式為extern

在完整掃瞄模式中,全部已索引的文件都被看作是匹配的。這類匹配仍然會被過濾、排序或分組,但是並不會做任何真正的全文檢索。這種模式可以用來統一全文檢索和非全文檢索的**,或者減輕sql伺服器的負(有些時候sphinx掃瞄的速度要優於類似的mysql查詢)。

我在使用過程中發現,如果把setmatchmode設定成sph_match_any或sph_match_phrase,sphinx不會啟用「完整掃瞄」,把setmatchmode設定成sph_match_all、sph_match_extended、sph_match_extended2、sph_match_boolean 時能自動啟用,所以完整模式的的啟用條件應加上乙個matchmode條件。還有空查詢關鍵字最好是用雙引號""表示,而不是單引號''

另外,setmatchmode只有第一次是生效的,後面的同語法設定會失效!

如:(在呼叫同乙個cl物件時同時存在如下的設定)   

$cl = new sphinxclient(); 

$cl->setmatchmode(sph_match_any);

$cl->setmatchmode(sph_match_all);

$cl->setmatchmode(sph_match_extended);

只有$cl->setmatchmode(sph_match_any)生效,後兩個無效,在執行query時matchmode為sph_match_any。

sphinx的實時索引

sphinx目前出來乙個realtime index即實時索引 據官方透露,目前已經開始可以在生產環境使用 他可以使用sphinxql用mysql協議進行查詢新增更新資料 看起來像乙個mysql一樣,不過他支援全文檢索,新更新進去的資料會自動索引達到實時索引的程度 但是他也有缺點,比如經常更新會導致...

Solr與Sphinx的比較

solr與sphinx的比較 solr版本 4.8.1 coreseek版本 3.2.14 基於sphinx 0.9.9 release 13.中文分詞的支援比較 sphinx目前只支援mmseg3,sphinx for chinese兩種分詞,目前大家使用的比較多的是mmseg3。mmseg3的詞...

Solr與Sphinx的比較

solr與sphinx的比較 solr版本 4.8.1 coreseek版本 3.2.14 基於sphinx 0.9.9 release 13.中文分詞的支援比較 sphinx目前只支援mmseg3,sphinx for chinese兩種分詞,目前大家使用的比較多的是mmseg3。mmseg3的詞...