所謂匹配模式就是用戶如何根據關鍵字在索引庫中查找相關的記錄。
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的查詢分詞。
SPH_MATCH_EXTENDED2,擴展匹配模式
將查詢看做一個Sphinx/Coreseek內部查詢語言的表達式。
在擴展查詢模式中可使用以下特殊操做符:
php
hello | world
python
hello -world
hello !world
函數
@title hello @body world
#title 字段中包含hello body字段中包含world
spa
@body[50] hello
#body位數限制在50之內
code
@(title,body) hello world
#title 或 body字段中包含Hello world
索引
@* hello
#只要其中一列包含hello
文檔
"hello world"~10
#hello world之間最多有10個詞
it
"the world is a wonderful place"/3
#至少匹配3個詞
擴展
aaa << bbb << ccc
#aaa,bbb,ccc必須按前後順序出現
select
^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, 強制使用下文所述的「完整掃描」模式來對查詢進行匹配;
注意,在此模式下,全部的查詢詞都被忽略,儘管過濾器、過濾器範圍以及分組仍然起做用,但任何文本匹配都不會發生.
這裏不作文本匹配,即便你傳遞查詢詞也將被忽略,通常做爲過濾來用,好比說,我在餐廳索引中搜索北京的全部餐廳,我只要將北京地名的id用SetFilter方法來過濾便可。PHP中經過setMatchMode函數來設置,如:<?php$sc = new SphinxClient();$sc->setMatchMode(SPH_MATCH_ANY);