4.1.匹配模式
优质
小牛编辑
133浏览
2023-12-01
有如下可选的匹配模式:
- SPH_MATCH_ALL, 匹配所有查询词(默认模式);
- SPH_MATCH_ANY, 匹配查询词中的任意一个;
- SPH_MATCH_PHRASE, 将整个查询看作一个词组,要求按顺序完整匹配;
- SPH_MATCH_BOOLEAN, 将查询看作一个布尔表达式 (参见Section4.2, “布尔查询语法”);
- SPH_MATCH_EXTENDED, 将查询看作一个Sphinx/Coreseek内部查询语言的表达式 (参见Section4.3, “扩展查询语法”). 从版本Coreseek 3/Sphinx 0.9.9开始, 这个选项被选项SPH_MATCH_EXTENDED2代替,它提供了更多功能和更佳的性能。保留这个选项是为了与遗留的旧代码兼容——这样即使Sphinx及其组件包括API升级的时候,旧的应用程序代码还能够继续工作。
- SPH_MATCH_EXTENDED2, 使用第二版的“扩展匹配模式”对查询进行匹配.
- SPH_MATCH_FULLSCAN, 强制使用下文所述的“完整扫描”模式来对查询进行匹配。注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生.
当如下条件满足时,SPH_MATCH_FULLSCAN模式自动代替其他指定的模式被激活:
- 1. 查询串是空的(即长度字符串为零)
- docinfo存储方式为
extern
.
在完整扫描模式中,全部已索引的文档都被看作是匹配的。这类匹配仍然会被过滤、排序或分组,但是并不会做任何真正的全文检索。这种模式可以用来统一 全文检索和非全文检索的代码,或者减轻SQL服务器的负担(有些时候Sphinx扫描的速度要优于类似的MySQL查询)。 “在论坛中搜索帖子”这件事可用作完整搜索模式的例子:用SetFilter()
指定用户ID但不提供任何查询词,Sphinx会匹配SetFilter()
所能匹配的全部文档,也就是这个用户ID对应的全部帖子。默认情况下,其结果的第一排序标准是相关度,其次是Sphinx文档ID,正序(较老的文档在前)。
注意,在完整扫描模式中,文档必须有至少一个属性。否则,即便设置docinfo的存储方式为extern,也无法启用完整扫描模式。