作者:来自 Elastic Gustavo Llermaly
了解如何在实际场景中通过同义词 API 使用短语同义词。
同义词一直以来都是 Elasticsearch 的核心功能,你可以利用它们来获得出色的搜索结果。人们通常认为同义词只是一对彼此相等的单词,但仅此而已吗?
新的同义词 API(synonyms API) 允许你快速轻松地创建和更新同义词,而 synchroute_graph 过滤器可让你顺利处理多词同义词。在本文中,我们将探索配置同义词的不同方法,并使用它们来解决常见但棘手的问题。
- AI 问题
- 使用同义词 API 创建同义词
- 测试
- 短语同义词支持
- 扩展同义词
情况是这样的:我们正处于 AI 热潮中,你希望与这项技术相关的文档成为人们获得的第一个搜索结果。想象一个包含 AI 文档和商业智能文档的系统。它既有 AI 文章,也有 Adobe Illustrator (AI) 文章。让我们看看同义词如何帮助我们创建满足当今要求的用户体验。
新的同义词 API 允许你创建同义词,而无需上传文件或在节点中运行其他命令来,这通常会导致文件在节点之间不一致或与 一起使用时出现问题。
让我们从创建同义词开始:
在分析器使用同义词集之前创建同义词集非常重要。
现在,让我们配置索引以使用同义词。为了获得更灵活的查询,我们将创建一个包含同义词的字段,另一个不包含同义词的字段。因此 title 不会有同义词,而 title.synonyms 会有同义词。脚本如下:
请注意,我们将在字段(field)搜索分析器中使用同义词,而不是将其用作索引(index)级别的分析器,因此我们不会将它们存储在索引中,而是在每次查询时生成它们 - 。在分析器中使用它们而不是对它们进行索引,允许你使用新 API 更新同义词并使用更少的磁盘空间。
让我们添加一些文档:
我们的明星文档是 #2。它讨论了 AI 以及我们想在用户中推广的内容。
现在,让我们开始不使用同义词进行搜索:
正如预期的那样,我们在结果中得到了 Adobe Illustrator 课程。
如果我们现在尝试将我们的字段与同义词一起使用会怎么样?
这样更好,但是,商业智能(Business Intelligence)文档在这里做什么?
在上一个示例中,我们使用了不支持多词或短语同义词的 token synonym filter 。这就是将 Business Intelligence 与 AI 匹配的原因。Artificial 和 Intelligence 不被视为短语,而是单个标记。让我们来解决这个问题!
这是一个简单的修复。我们需要使用 synonym_graph。这是一个允许你处理多词同义词的变体。虽然它只能用作搜索分析器,但与在索引时使用同义词相比,在搜索阶段使用同义词可能更有优势。
我们可以通过运行以下序列来更新搜索分析器而无需重新索引数据:
关闭索引:
注意:如果涉及到修改索引中的 settings 部分,我们需要上面的 _close 操作。
编辑 settings。请注意,现在过滤器的类型是 synonym_graph,而不是 synonym:
我们再次打开索引:
现在让我们运行搜索:
太棒了!Business Intelligence 文章已经不存在了。
如果我们明确搜索 artificial intelligence 会发生什么?
Adobe Illustrator?
那么现在发生了什么?这就是我在文章开头所说的,我们需要挑战同义词只是两个等价词的概念。我们还需要考虑扩展的方向性。
默认情况下,如果我们说 AI,Artificial Intelligence,它意味着两件事:
- AI 等同于 Artificial Intelligence
- Artificial Intelligence 等同于 AI
在这种情况下,第 2 条并不正确。Adobe Illustrator 绝对不同于人工智能。
为了证实这一点,我们可以使用 _analyze API 来查看我们的搜索词是如何转换的:
如你所见,我们正在生成一个 ai token,它存在于 Adobe Illustrator 文档中,从而产生了不必要的匹配。
那么,我们最终该如何修复它呢?我们需要使用单向标记,其中 AI 与 Artificial Intelligence 相同,但 Artificial Intelligence 与 AI **不**相同。
感谢同义词 API,这非常简单。我们可以对现有同义词集进行 PUT 调用来更新它:
此更改将用 Artificial Intelligence 取代任何提及 AI 的内容。这样,即使提到 AI,Adobe Illustrator 也不会出现。如果我们确实希望它出现,我们可以创建这个同义词:“AI => AI, Artificial Intelligence”。
让我们再分析一下:
ai token 已消失。
现在,让我们检查搜索是否按预期工作:
Business Intelligence 又来了!但这次,原因不同。默认匹配查询运算符是 OR,两个文档都包含单词 intelligence。如果我们想运行更严格的搜索并确保所有关键字都存在,我们可以使用 match_phrase 或将 operator 参数更改为 AND。
现在,无论人们如何搜索,我们的 AI 文档都将成为搜索结果中的佼佼者。
最后,让我们清理一下我们创建的索引和同义词集:
你可以在中阅读有关同义词 API 的更多信息。
同义词是定制搜索体验的强大工具,因此了解可用的配置以获得所需的结果至关重要。同义词 API 允许你快速轻松地创建和更新同义词,而 synchroute_graph 过滤器可让你顺利处理多词同义词。
Elasticsearch 包含许多新功能,可帮助您为您的用例构建最佳搜索解决方案。深入了解我们的以了解更多信息,开始,或立即在你的试用 Elastic。
想要获得 Elastic 认证?了解下一期 何时举行!