Если я правильно понимаю, то в Elasticsearch на данный момент, каждый score полученный из одного should запроса, складывается с остальными, можно ли переопределить это поведение и сделать, например умножение?
Для примера, у меня есть индекс, имеющий следующую структуру:
{
"some_measures1": [{...}],
"some_measures2": [{...}],
"some_measures3": [{...}],
"multiplier": 100
}
По каждому nested полю я выполняю ранжирование в should контексте. Итоговые оценки суммируются, после чего умножаются с помощью field_value_factor на multiplier. Вопрос заключается в том, можно ли оценки из nested запросов перемножить друг на друга вместо того, чтобы суммировать?
В запросе nested, по умолчанию, расчитывается среднее значение, а не сумма. Сумма расчитывается в bool, и это поведение изменить нельзя. Однако есть несколько других способов решить эту проблему. Можно разделить фильтрацию с рассчетом релевантности и воспользоваться function_score. Либо script_score для расчета по одной записи или для переведения релевантности в логарифимическую шкалу. Учитывая что log(xy) = log(x) + log(y)
, можно заменить умножение на сложение.
Можно разделить фильтрацию с рассчетом релевантности и воспользоваться function_score
Не совсем понял этот момент, на данный момент я пользуюсь function score , но не нашел способа умножать оценки полученные из nested запросов друг на друга.
Ниже приведен примерный запрос. Пробовал сделать то же самое с помощью functions в function_score, и собирать запрос в блоке filter, но насколько я понял, filter возвращает единицу при совпадении, а не результат внутреннего function score..
{
"function_score": {
"field_value_factor": {
"field": "multiplier"
},
"query": [
{
"bool": {
"should": [
{
"nested": {
"path": "some_measures",
"query": {
"function_score": {
"weight": 0.5,
"query": {
"terms": {
"some_measures.values": [
"values"
]
}
}
}
}
}
}
]
}
}
]
}
}
Ничего не понимаю. У вас только один запрос should на что вы его собрались умножать? Вы не могли бы привести полный пример с маппингом, данными, запросами и желаемым результатом.
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.