当前位置 博文首页 > 文章内容

    Sphinx匹配模式详解[转]

    作者:helloyb 栏目:未分类 时间:2020-09-16 10:01:28

    SphinxClient::setMatchMode

     

    ConstantDescription
    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),执行这样的查询将费耗较长时间。