Взаимодействие score в should контексте

Если я правильно понимаю, то в 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.