所谓匹配模式就是用户怎样依据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);