【问题标题】:`min_score` doesn't work for `rescore` in Elasticsearch`min_score` 不适用于 Elasticsearch 中的 `rescore`
【发布时间】:2016-04-16 21:40:04
【问题描述】:

我希望删除所有分数低于1 的文档,但以下查询不起作用:

curl "http://localhost:9200/megacorp/_search" -d '{
  "min_score": 1,
  "query": {
    "matchAll": {}
  },
  "rescore": {
    "query": {
      "score_mode": "min",
      "rescore_query": {
        "match": {"first_name": "Jane"}
      }
    }
  }
}'

看起来min_score 不适用于rescore

这样做的正确方法是什么?

【问题讨论】:

  • @user 这是score_mode

标签: json elasticsearch min


【解决方案1】:

我认为您混淆了min_scorerescore 的概念。两者用于不同的目的。

min_score 应用于初始查询。在您的情况下,它是 match_all 查询,因此每个文档都以 1 的分数返回,并且 此分数min_score 进行检查 不管 rescore 做了什么.

rescore 用于影响返回文档的scoring(您的初始查询)。它不影响结果的count,只影响结果的order。所以即使"match": {"first_name": "Jane"} 得分小于 1,也会显示出来。同样,如果你使用score_mode: total并且总分大于1,但如果原始查询的分数小于1,则不会显示在结果中。

您可以使用explain api 了解如何计算分数。最后,如果你想玩scoring,你可以看看script_scorefunction score

我希望这能消除疑虑。

【讨论】:

  • 感谢您的解释。你的意思是rescore 在设计上不受min_score 的影响,对吧?如果是这样,有没有办法根据rescore 之后的重新评分来删除不需要的结果?
  • 很高兴我能帮上忙。是的,您可以删除不需要的结果,但您必须遍历每个返回的文档并检查其_score,因为这将是重新评分查询后计算的分数。
  • 感谢您的快速回复。由于不必要的网络和计算成本,我不想从 Elasticsearch 获取不需要的文档。是否可以在 Elasticsearch 中过滤掉它们,而不是在应用程序中?
  • 我不知道有这样的事情,我唯一可以建议的是将您重新评分查询放在主查询中,但我猜这不是您想要的。
猜你喜欢
  • 2016-11-24
  • 2017-08-23
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多