首页 > 解决方案 > ElasticSearch 和在数组中搜索

问题描述

我们有一个 ES 索引,它有一个将其数据存储为数组的字段。在这个字段中,我们包括原始文本,加上没有任何标点符号、特殊字符等的文本。问题是,在该字段上搜索时,多个值似乎歪曲了分数。

例如,如果我们搜索术语 'up',则包含数组 ['up, up and away', 'up up and away'] 的文档在 multi_match 中得分更高(我们使用它是因为我们可能会搜索更多比一个字段)比带有数组的文档简单地['up']。

最后,我想我正在寻找的是一个分数,它模拟计算数组中每个项目的分数并返回最高值。我相信在这种情况下,将“up”与“Up”和“Up, Up and Away”进行比较会给我“Up”的更高分数。

通过我的研究,我相信我可能需要在这个领域进行自定义评分......?如果这是真的,我是否将 "score_mode": "max" 视为我想要的?

标签: elasticsearch

解决方案


我认为你稍微过度设计了你的索引。您不需要为相同的信息创建重复的字段并自己删除标点符号、小写字段。

我建议您阅读什么是弹性搜索令牌过滤器以及如何为同一字段创建多个分析器。

对于您的确切用例,如果您提供了文档示例,那肯定会有所帮助。但无论如何,看看你正在处理什么 - 使用默认分析器和你自己构建的自定义分析器索引你的字符串数组。然后您可以使用相同的字段,但使用不同的分析器(不同处理的文本)来控制您的分数。


推荐阅读