【问题标题】:Elastic Search: score as percentage弹性搜索:得分百分比
【发布时间】:2017-02-14 15:00:13
【问题描述】:

是否可以对 Elastic Search 进行查询,返回分数占最高分数的百分比?到现在为止,它返回一个像"_score": 0.00786336, 这样的值以及像max_score": 0.13435546 这样的最大分数,所以我可以尝试转换我的结果,但我希望结果已经是百分比,所以我可以使用最低分数,例如 40%。

简而言之:有没有办法以最高分数的百分比获得 _score,还是有另一种设置最低分数的方法? (似乎很难,因为 max_score 似乎是随机的)

【问题讨论】:

  • Elasticsearch 无法直接为您做到这一点。
  • 在运行查询之前,您无法知道将返回的分数范围。因此,您正在查看客户端转换以执行您的要求。

标签: elasticsearch


【解决方案1】:

max_score 不是随机的,它只是您查询结果集的所有分数的max

The max_score value is the highest _score of any document that matches our query.

例如,如果您的 _score 值为:[0.00786336, 0.0123, 0.0813523, 0.13435546],那么您的 max_score0.13435546

根据匹配的相关性,_score 的高度也没有限制(即它可以超过 1

如果您尝试使用_score 从命中到max_score 的比率来表示“百分比匹配”,您将得到不可靠的结果,尤其是如果您有很多低分几乎没有相关性的点击,但max_score 接近那些低分。

如果您尝试按最低分数过滤,您应该使用min_score

另见"What is Relevance?"

【讨论】:

  • 感谢您的回答。我已经找到了 min_score。然而,这个函数没有意义,因为它必须与最高分数相关。我无法提前知道 max_score 是什么。例如,如果我使用 1.2 的 min_score 而我的 max_score 结果是 1.1,我就有问题了。我需要提前知道 _score 的比例/范围是多少。
  • 分数是相关性——相关性是由匹配是否准确的“线索”的组合来确定的。线索越多,得分越高。如果您使用基于_score / max_score 的百分比,则该百分比不会以任何方式准确。如果您的最强命中是1.1 的分数并且实际上是您想要的结果,那么您永远不应该将min_score 设置为接近该值的任何位置。甚至 ES 文档也说过滤掉分数几乎没有意义,因为 ES 的性质只返回匹配项,默认情况下只是按相关性排序。希望这会有所帮助。
【解决方案2】:

一种方法是存储查询哈希和 min_score(计算为最高分数的百分比)。例如,如果 max_score 为 1.1,则该查询的 min_score 可以为 0.44,这有助于切断不相关的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    相关资源
    最近更新 更多