我希望删除分数低于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
无效。
这样做的正确方法是什么?
答案 0 :(得分:0)
我认为你混淆了min_score
和rescore
的概念。两者都用于不同的目的。
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_score或function score。
我希望这可以解除疑问。