elasticsearch - ElasticSearch 和在数组中搜索
问题描述
我们有一个 ES 索引,它有一个将其数据存储为数组的字段。在这个字段中,我们包括原始文本,加上没有任何标点符号、特殊字符等的文本。问题是,在该字段上搜索时,多个值似乎歪曲了分数。
例如,如果我们搜索术语 'up',则包含数组 ['up, up and away', 'up up and away'] 的文档在 multi_match 中得分更高(我们使用它是因为我们可能会搜索更多比一个字段)比带有数组的文档简单地['up']。
最后,我想我正在寻找的是一个分数,它模拟计算数组中每个项目的分数并返回最高值。我相信在这种情况下,将“up”与“Up”和“Up, Up and Away”进行比较会给我“Up”的更高分数。
通过我的研究,我相信我可能需要在这个领域进行自定义评分......?如果这是真的,我是否将 "score_mode": "max" 视为我想要的?
解决方案
我认为你稍微过度设计了你的索引。您不需要为相同的信息创建重复的字段并自己删除标点符号、小写字段。
我建议您阅读什么是弹性搜索令牌过滤器以及如何为同一字段创建多个分析器。
对于您的确切用例,如果您提供了文档示例,那肯定会有所帮助。但无论如何,看看你正在处理什么 - 使用默认分析器和你自己构建的自定义分析器索引你的字符串数组。然后您可以使用相同的字段,但使用不同的分析器(不同处理的文本)来控制您的分数。
推荐阅读
- javascript - 异步函数阻止事件循环 - 调用 app.get 方法时不呈现页面
- python-3.x - 如何在 OS X Catalina 上使用 cron 调度 python 脚本
- spartacus-storefront - 刷新令牌功能
- iphone - 如何在 Flutter 中为 iOS 的 CupertinoPicker/CupertinoDatePicker 添加/启用自动收报机声音?
- c++ - 使用 std::function 映射对象方法
- python - Python没有将正确的内容写入csv
- javascript - 如何将返回数据中的值传递给 vue.js 中的另一个脚本 [mounted()]
- python - 添加和删除 QTreeWidgetItems 的复选框
- c++ - 具有内存和隔离的 SQLite
- php - 提交tinymce编辑器后未发送数据库中的所有数据