1. 程式人生 > 實用技巧 >Sphinx匹配模式詳解[轉]

Sphinx匹配模式詳解[轉]

SphinxClient::setMatchMode

ConstantDescription
SPH_MATCH_ALL 匹配所有查詢詞(預設模式).
SPH_MATCH_ANY 匹配查詢詞中的任意一個.
SPH_MATCH_PHRASE 將整個查詢看作一個片語,要求按順序完整匹配.
SPH_MATCH_BOOLEAN 將查詢看作一個布林表示式.
SPH_MATCH_EXTENDED 將查詢看作一個Sphinx內部查詢語言的表示式.
SPH_MATCH_FULLSCAN 使用完全掃描,忽略查詢詞彙.
SPH_MATCH_EXTENDED2 類似SPH_MATCH_EXTENDED
,並支援評分和權重.

  • SPH_MATCH_ALL
例:“The was” 能匹配“Thespeechwascarefully phrase”,不能匹配“Thephrase is loaded with irony”
  • SPH_MATCH_ANY
例:“The was” 能匹配“Thespeechwascarefully phrase”,能匹配“Its predominant veinwas, in poe's own phrase”,也能匹配“Thephrase is loaded with irony”
  • SPH_MATCH_PHRASE
例:“The phrase”能匹配“The phraseis loaded with irony”,不能匹配“Thespeech was carefullyphrase”
  • SPH_MATCH_BOOLEAN
布林查詢允許使用下面特殊操作符: AND:hello & world
OR:hello | world
NOT:hello -world或hello !world
Grouping:(hello world)
  • SPH_MATCH_EXTENDED
參照SPH_MATCH_EXTENDED2
  • SPH_MATCH_FULLSCAN
注意,在此模式下,所有的查詢詞都被忽略,儘管過濾器、過濾器範圍以及分組仍然起作用,但任何文字匹配都不會發生。 當如下條件滿足時,SPH_MATCH_FULLSCAN模式自動代替其他指定的模式被啟用:
1. 查詢串是空的(即長度字串為零)
2. docinfo 儲存方式為 extern.
在SPH_MATCH_FULLSCAN模式中,文件必須有至少一個屬性。否則,即便設定docinfo的儲存方式為extern,也無法啟用完整掃描模式。
  • SPH_MATCH_EXTENDED2
擴充套件查詢有下面特殊操作符: 操作符OR:hello | world,區配含有hello或world 操作符NOT:hello -world或hello !world,區配包含hello,且不包含world 欄位搜尋操作符:@title hello @body world,匹配title中有hello及body中有world 欄位限位修飾符:@title[5] hello ,匹配title欄位前5個詞中包含有hello 多欄位搜尋符:@(title,body) hello,匹配title或body包含有hello 全欄位搜尋符:@* hello,區配任何一列包含有hello 閥值匹配符:"this is test document number"/3,匹配至少包含有3個詞 短語(phrase)搜尋符:“hello world” 臨近(proximity)搜尋符:“hello world”~10,匹配hello與world之間小於10個詞 嚴格有序搜尋符:aaa<<bbb<<ccc,匹配aaa,bbb,ccc按順序出現 欄位開始和欄位結束脩飾符:^hello world$,匹配以hello開始,world為結尾 AND是一個隱式操作符,“hello world”表示hello與world都要出現在匹配的記錄中;OR的優先順序高於AND,所以“looking for cat | dog | mouse”的意思是“looking for (cat | dog | mouse)”而不是“(looking for cat) | dog | mouse” 像“-dog”這種隱式地包含了所有查詢記錄,是不會被執行的。這主要是考慮到技術上與效能上的原因,從技術上來說,sphinx不能總保持所有文章的ID列表,效能上來說,當結果集巨大(10-100M),執行這樣的查詢將費耗較長時間。