script_score
在 OpenSearch 中,我使用 Painless 脚本语言实现了自定义。当我只使用query.bool.should
它时,每个文档都会调用一次,并且返回的结果_score
是正确的
但是,当我在查询中结合使用query.bool.should
和时,每个文档会调用两次或三次,而最终得分是所有调用的总和。这会导致得分高于预期。query.bool.must
script_score
should
为什么会发生这种情况?当同时使用和must
时,如何确保每个文档仅调用一次query
?或者至少阻止 OpenSearch 对每个文档的所有调用结果求和,并仅返回其中一个调用的结果?
例如,参见下面的查询(我在这里简化了它,以便示例易于理解),您会看到来源script_source
是,return Integer.parseInt(doc['_id'].value);
但是因为我使用了两者should
,并且在我的查询中,文档的must
计算是(即)而不是_score
6148
18444
6148 * 3
6148
{
"from": 0,
"size": 10,
"stored_fields": "_none_",
"docvalue_fields": [
"_id",
"_score"
],
"sort": [
{
"_score": {
"order": "asc"
}
}
],
"query": {
"function_score": {
"query": {
"bool": {
"must": [
{
"term": { "category_ids": "2" }
},
{
"terms": { "visibility": ["3", "4"] }
}
],
"should": [
{
"ids": {
"values": [
"6148"
]
}
}
],
"minimum_should_match": 1
}
},
"script_score": {
"script": {
"lang": "painless",
"source": "return Integer.parseInt(doc['_id'].value);"
}
}
}
}
}