我希望删除分数小于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_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。
我希望这消除了疑问。