Elasticsearch如何聚合或加权来自两个子查询("bool query"和"decay function")的分数
How does Elasticsearch aggregate or weight scores from two sub queries ("bool query" and "decay function")
我有一个复杂的 Elasticsearch 查询,如下例所示。该查询有两个子查询:加权布尔查询和衰减函数。我试图了解 Elasticsearch 如何聚合每个子查询的分数。如果我单独 运行 第一个子查询(加权布尔查询),我的最高分是 20。如果我单独 运行 第二个子查询(衰减函数),我的分数是 1。但是,如果我 运行 两个子查询在一起,我的最高分是 15。有人可以解释一下吗?
我的第二个相关问题是如何对两个子查询的分数进行加权?
query = { "function_score": {
"query": {
"bool": {
"should": [
{'match': {'title': {'query': 'Quantum computing', 'boost': 1}}},
{'match': {'author': {'query': 'Richard Feynman', 'boost': 2}}}
]
},
},
"functions": [
{ "exp": # a built-in exponential decay function
{
"publication_date": {
"origin": "2000-01-01",
"offset": "7d",
"scale": "180d",
"decay": 0.5
},
},
}]
}}
我自己通过阅读 elasticsearch document on the usage of function_score. 找到了答案 function_score
有一个参数 boost_mode
指定如何组合查询分数和函数分数。默认情况下,boost_mode
设置为 multiply
。
除了默认的multiply
方法外,我们还可以将boost_mode
设置为avg
,并在上面的衰减函数exp
中添加一个参数weight
, 那么综合分数将是: ( the_bool_query_score + the_decay_function_score * weight ) / ( 1 + weight )
.
我有一个复杂的 Elasticsearch 查询,如下例所示。该查询有两个子查询:加权布尔查询和衰减函数。我试图了解 Elasticsearch 如何聚合每个子查询的分数。如果我单独 运行 第一个子查询(加权布尔查询),我的最高分是 20。如果我单独 运行 第二个子查询(衰减函数),我的分数是 1。但是,如果我 运行 两个子查询在一起,我的最高分是 15。有人可以解释一下吗?
我的第二个相关问题是如何对两个子查询的分数进行加权?
query = { "function_score": {
"query": {
"bool": {
"should": [
{'match': {'title': {'query': 'Quantum computing', 'boost': 1}}},
{'match': {'author': {'query': 'Richard Feynman', 'boost': 2}}}
]
},
},
"functions": [
{ "exp": # a built-in exponential decay function
{
"publication_date": {
"origin": "2000-01-01",
"offset": "7d",
"scale": "180d",
"decay": 0.5
},
},
}]
}}
我自己通过阅读 elasticsearch document on the usage of function_score. 找到了答案 function_score
有一个参数 boost_mode
指定如何组合查询分数和函数分数。默认情况下,boost_mode
设置为 multiply
。
除了默认的multiply
方法外,我们还可以将boost_mode
设置为avg
,并在上面的衰减函数exp
中添加一个参数weight
, 那么综合分数将是: ( the_bool_query_score + the_decay_function_score * weight ) / ( 1 + weight )
.