4.1.匹配模式
有如下可选的匹配模式:
? SPH_MATCH_ALL, 匹配所有查询词(默认模式)
? SPH_MATCH_ANY, 匹配查询词中的任意一个
? SPH_MATCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配
? SPH_MATCH_BOOLEAN, 将查询看作一个布尔表达式 (参见 节 4.2, “布尔查询语法”
? SPH_MATCH_EXTENDED, 将查询看作一个Sphinx内部查询语言的表达式(参见 节 4.3, “ 扩展的查询语法” )
还有一个特殊的“完整扫描”模式,当如下条件满足时,该模式被自动激活:
查询串是空的(即长度为零) 2. docinfo 存储方式为extern
在完整扫描模式中,全部已索引的文档都被看作是匹配的。这类匹配仍然会被过滤、排序或分组,但是并不会做任何真正的全文检索。这种模式可以用来统一全文检索和非全文检索的代码,或者减轻 SQL服务器的负担(有些时候 Sphinx扫描的速度要优于类似的MySQL查询)
4.2.布尔查询
布尔查询允许使用下列特殊操作符: ?显式的与(AND)操作符
hello & world
? 或(OR)操作符
hello | world
?非(NOT)操作符
hello -world hello !world
?分组(grouping)
( hello world )
以下是一个使用了如上全部操作符的例子:
示例5 布尔查询示例
( cat -dog ) | ( cat -mouse)
与(AND)操作符为默认操作,所以“hello world”其实就是“hello & world”
或(OR)操作符的优先级高于与操作符,因此“lookingfor cat | dog | mouse”意思是"looking for ( cat | dog | mouse )" 而不是 "(looking for cat) | dog | mouse"
像“-dog”这种查询不能被执行,因为它差不多包括索引所有文档。这既有技术上的原因,也有性能上的原因。从技术上说,Sphinx并不总是保持一个全部文档ID的列表。性能方面,当文档集非常大的时候(即 10-100M个文档),对这种执行查询可能需要很长的时间。