我希望删除分数小于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

什么是正确的方法?

最佳答案

我认为您混淆了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

我希望这消除了疑问。

10-08 16:20