我使用轻松的脚本对布尔查询中的文档进行评分。我需要对布尔查询的每个“必须”子句进行不同的评分。
所以我有两个选择:
选项1看起来像这样:
GET /_search
{
"source": {
"query": {
"script_score": {
"query": {
"bool": {
"must": [
{*subquery1_here*},
{*subquery2_here*}
]
}
},
"script": {
"id": "universal_script",
"params": {
"query": ["{{subquery1-params}}", "{{subquery2-params}}"],
"score-type": ["{{subquery1-score_type}}", "{{subquery2-score_type}}"]
}
}
}
}
}
}
选项2看起来像这样:
GET /_search
{
"source": {
"query": {
"bool": {
"must": [
{
"script_score": {
"query": {*field1_subquery_here*}
},
"script": {
"id": "script-1",
"params": {
"query": "{{subquery1-params}}"
}
}
}
},
{
"script_score": {
"query": {*field2_subquery_here*}
},
"script": {
"id": "script-2",
"params": {
"query": "{{subquery2-params}}"
}
}
}
}
]
}
}
}
}
我希望选择2,但是我想知道它是否需要更多的计算能力?
我对选项2的担心是,Elastic将独立运行每个script_score并得分与给定脚本的所有匹配项。然后将运行布尔查询,仅获取与两个子查询都匹配的文档。 这将很糟糕,因为评分脚本将比option1在更多文档上执行。
所以这就是为什么我想知道bool查询中的分数是什么时候计算出来的?