【问题标题】:ElasticSearch and Searching in ArraysElasticSearch 和在数组中搜索
【发布时间】:2019-12-05 04:16:23
【问题描述】:

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

例如,如果我们搜索术语“up”,则包含数组 ['up, up and away', 'up up and away'] 的文档使用 multi_match 得分更高(我们之所以使用它是因为我们可以搜索多个字段)而不是具有数组的文档,只需 ['up']。

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

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,似乎令牌过滤器可以解决我的问题。我们实际上剥离的不仅仅是标点符号(看起来标准分析器应该已经这样做了..?),但看起来我可以自定义分析器?
    • 是的。我强烈建议构建自定义分析器/分析器来根据需要处理文本,然后使用这些不同的规则来驯服评分。我自己已经做过很多次了,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多