SphinxClient::setMatchMode
Constant | Description |
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 ,并支持评分和权重. |
例:“The was” 能匹配“The speech was carefully phrase”,不能匹配“The phrase is loaded with irony”
例:“The was” 能匹配“The speech was carefully phrase”,能匹配“Its predominant vein was, in poe‘s own phrase”,也能匹配“The phrase is loaded with irony”
例:“The phrase”能匹配“The phrase is loaded with irony”,不能匹配“The speech was carefully phrase”
布尔查询允许使用下面特殊操作符:
AND:hello & world
OR:hello | world
NOT:hello -world或hello !world
Grouping:(hello world)
参照SPH_MATCH_EXTENDED2
注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生。
当如下条件满足时,SPH_MATCH_FULLSCAN模式自动代替其他指定的模式被激活:
1. 查询串是空的(即长度字符串为零)
2. docinfo 存储方式为 extern.
在SPH_MATCH_FULLSCAN模式中,文档必须有至少一个属性。否则,即便设置docinfo的存储方式为extern,也无法启用完整扫描模式。
操作符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),执行这样的查询将费耗较长时间。
Sphinx匹配模式详解[转]
原文:https://www.cnblogs.com/helloyb/p/13677455.html