我们帮助许多客户将
搜索功能集成到他们的应用程序中
时,他们希望搜索功能比仅仅严格匹配查询与文档更加智能。
实现这一目标有多种方式。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%的查询在第一次查询时就返回了结果,那么与第一次查询同时进行第二次查询就没有多大意义,这只会浪费资源。