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. 1. 查询串是空的(即长度字符串为零)
  2. docinfo存储方式为extern.

在完整扫描模式中,全部已索引的文档都被看作是匹配的。这类匹配仍然会被过滤、排序或分组,但是并不会做任何真正的全文检索。这种模式可以用来统一 全文检索和非全文检索的代码,或者减轻SQL服务器的负担(有些时候Sphinx扫描的速度要优于类似的MySQL查询)。 “在论坛中搜索帖子”这件事可用作完整搜索模式的例子:用SetFilter()指定用户ID但不提供任何查询词,Sphinx会匹配SetFilter()所能匹配的全部文档,也就是这个用户ID对应的全部帖子。默认情况下,其结果的第一排序标准是相关度,其次是Sphinx文档ID,正序(较老的文档在前)。

注意,在完整扫描模式中,文档必须有至少一个属性。否则,即便设置docinfo的存储方式为extern,也无法启用完整扫描模式。