⚠️ 此页面为自动翻译,翻译可能不完美。

Fuzzy matching and 2nd pass query

我们帮助许多客户将 搜索功能集成到他们的应用程序中 时,他们希望搜索功能比仅仅严格匹配查询与文档更加智能。
实现这一目标有多种方式。Manticore Search 使这一过程非常简单,因为模糊匹配功能是开箱即用的。它由三个主要组件组成:

1. 多数匹配操作符:

"computing and technology news"/2 这意味着短语中的至少两个词需要匹配,即此查询会找到同时包含“computing news”和“technology news”的文本。

2. 邻近搜索操作符:

"computing news"~3 这意味着查询中的词之间可以有少于N个不匹配的词。假设文本为 a b c d e f g h,以下是几个示例:

  • "a h"~7 会找到,因为 b c d e f h 是6个不匹配的词,少于7
    然而 "a h"~6 不会找到该文本
  • "a d h"~6 会找到
  • "a d h"~5 不会找到

3. NEAR 操作符

computing NEAR/6 "technology news"

上述邻近操作符仅适用于关键字集合。NEAR 更加通用,可以接受任意子表达式作为其两个参数,当两个子表达式在彼此N个词内找到时,无论顺序如何,都会匹配文档。

上述查询将:

  • 与包含 computing is a popular topic in technology news 的文档匹配,因为第一个词和短语在6个词内找到
  • 但不会与 computing nowadays is a popular topic in* technology news 匹配,因为间隔已经是6,超过了 NEAR 操作符设置的限制。

二次查询逻辑

许多客户使用二次查询逻辑:这是当你首先运行一个更严格的查询,如果未找到结果或返回结果不足时,再运行一个更宽松的查询。还可能有更复杂的三重或四重查询逻辑。这取决于你的需求,以及你是否希望用户至少在任何情况下都能找到一些内容。或者相反,你可以让他们找到与查询完全匹配的内容。

有时,将查询变得更严格更有意义。例如,如果你的默认匹配策略是“任何词匹配”,而你的应用程序没有扩展语法让用户自己指定最佳查询,那么先尝试“所有词都匹配”策略甚至“短语匹配”策略是有意义的。这可能会显著提高搜索质量。

在某些应用程序中,将第一次/第二次查询并行化是有意义的。这可以使用 Manticore Search 的多查询功能轻松实现。这里的逻辑是预先执行第二次查询,如果第一次查询未找到任何内容,结果将已就绪,因为查询是同时进行的,这提高了性能。然而,这取决于许多因素。你需要注意,有时这可能会降低性能。这些因素包括:

  • 你使用的是什么硬件?如果硬件不足以同时处理两个查询,或者响应时间接近单个查询的两倍,使用这种技术就没有多大意义。
  • 你的负载如何?如果 Manticore Search 实例/服务器已经负载很重,响应时间会更差。
  • 你的统计数据如何?如果99%的查询在第一次查询时就返回了结果,那么与第一次查询同时进行第二次查询就没有多大意义,这只会浪费资源。

安装Manticore Search

安装Manticore Search