Так что это немного странно, но ссылка, предоставленная @jzzfs, уже довольно близка. Средний режим запроса оценки функции обеспечивает взвешенное среднее значение, которое вызывает этот эффект :
В случае, если для параметра score_mode установлено значение avg, отдельные результаты будут быть объединены в среднем взвешенный . Например, если две функции возвращают оценку 1 и 2 и их соответствующие веса равны 3 и 4, то их оценки будут объединены как (1 * 3 + 2 * 4) / (3 + 4) и , а не (1 * 3 + 2 * 4) /2.
Кроме того, важно отметить, что из-за этого оценки функций, фильтры которых не соответствуют текущему документу , не имеют никакого эффекта в среднем оценка , а не ее снижение. В вашем примере это означает, что если документ совпадает только с клиентом MALE
, он будет иметь оценку 8, но, поскольку он взвешен, он фактически будет иметь оценку (1*8)/8 = 1
. Если это MALE
с именем Jackson
, счет снова будет (1*8 + 1*4)/(8+4)=1
. Это легко увидеть, используя объяснение API :
GET kibana_sample_data_ecommerce/_explain/ER5Bv3ABEiTwEf3FhKws
{
"query": {
"function_score": {
"functions": [
{
"filter": { "match": { "customer_last_name": "Cook" } },
"weight": 2
},
{
"filter": { "match": { "customer_first_name": "Jackson" } },
"weight": 4
},
{
"filter": { "match": { "customer_gender" : "MALE"} },
"weight": 8
}
],
"score_mode": "avg",
"boost_mode": "replace"
}
}
}
возвращает
{
"_index" : "kibana_sample_data_ecommerce",
"_type" : "_doc",
"_id" : "ER5Bv3ABEiTwEf3FhKws",
"matched" : true,
"explanation" : {
"value" : 1.0,
"description" : "min of:",
"details" : [
{
"value" : 1.0,
"description" : "function score, score mode [avg]",
"details" : [
{
"value" : 8.0,
"description" : "function score, product of:",
"details" : [
{
"value" : 1.0,
"description" : "match filter: customer_gender:MALE",
"details" : [ ]
},
{
"value" : 8.0,
"description" : "product of:",
"details" : [
{
"value" : 1.0,
"description" : "constant score 1.0 - no function provided",
"details" : [ ]
},
{
"value" : 8.0,
"description" : "weight",
"details" : [ ]
}
]
}
]
}
]
},
{
"value" : 3.4028235E38,
"description" : "maxBoost",
"details" : [ ]
}
]
}
}