所謂匹配模式就是用戶怎樣依據keyword在索引庫中查找相關的記錄。
SPH_MATCH_ALL, 匹配所有查詢分詞(默認模式);
如「手機配件」。不匹配 「我有一部手機」,但可以匹配 「手機壞了,需要找配件」。
因爲「手機配件」 被分紅 「手機」,「配件」兩個詞。匹配條件是必須同一時候包括這兩個詞。因此「我有一部手機」不符合匹配要求。
SPH_MATCH_ANY, 匹配查詢詞中的隨意一個分詞;
如「手機配件」。會匹配「我有一部手機」,因爲索引庫僅僅要包括任一個分詞就能夠被搜到,固然也能匹配「手機壞了,需要找配件」。
SPH_MATCH_PHRASE, 將整個查詢看做一個詞組。要求按順序完整匹配;
這個與select * from [tab] where key like '%手機配件%'相類似,如「手機配件」,不匹配 「手機壞了,需要找配件」,但可以匹配 「你這兒有手機配件嗎?
」。
SPH_MATCH_BOOLEAN, 將查詢看做一個布爾表達式, 可以簡單的與或非運算;
如( cat !dog ) | ( cat !mouse)
意思是搜索出所有匹配cat,但不匹配dog和mouse的查詢分詞。php
SPH_MATCH_EXTENDED2,擴展匹配模式
將查詢看做一個Sphinx/Coreseek內部查詢語言的表達式。
在擴展查詢模式中可以使用例如如下特殊操做符:
css
hello | world
hello -world
hello !world
@title hello @body world
#title 字段中包括hello body字段中包括world
@body[50] hello
#body位數限制在50之內
@(title,body) hello world
#title 或 body字段中包括Hello world
@* hello
#僅僅要當中一列包括hello
"hello world"~10
#hello world之間最多有10個詞
"the world is a wonderful place"/3
#至少匹配3個詞
aaa << bbb << ccc
#aaa,bbb,ccc必須按前後順序出現
^hello ... world$
#限定必須以hello開頭。以world結尾
如:"hello world" @title "example program"~10 @body python -(php|perl) @* code
要求同一時候匹配:
在文檔的隨意字段中找相鄰的「hello」和「world」
文檔的title字段中還必須包括 「example」和「program」這兩個詞,並且他們之間至多有10個(不包括10個)其它的詞
同一時候。body字段必須含有詞「python」。但既沒有「php」也沒有「perl」
任一字段中包括」code「
SPH_MATCH_EXTENDED, 同SPH_MATCH_EXTENDED2, 爲了兼容舊版本號;
SPH_MATCH_FULLSCAN, 強制使用下文所述的「完整掃描」模式來對查詢進行匹配;html
注意,在此模式下。所有的查詢詞都被忽略。雖然過濾器、過濾器範圍以及分組仍然起做用。但不論什麼文本匹配都不會發生.python
這裏不作文本匹配,即便你傳遞查詢詞也將被忽略,通常做爲過濾來用,比方說,我在餐廳索引中搜索北京的所有餐廳,我僅僅要將北京地名的id用SetFilter方法來過濾就能夠。 PHP中經過setMatchMode函數來設置,如: <?php $sc = new SphinxClient(); $sc->setMatchMode(SPH_MATCH_ANY);