Sphinx匹配模式详解【转】

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 ,并支持评分和权重.

 

 

 

 

 

 

 

 

 

 

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

 

posted @ 2020-09-16 09:54  helloyb  阅读(432)  评论(0编辑  收藏  举报