Обмен технологиями

Пользовательская оценка Elasticsearch и оценка по сценарию

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

В Elasticsearch механизм оценки по умолчанию (например, алгоритм BM25) в большинстве случаев может обеспечить хорошее ранжирование результатов поиска. Однако в некоторых конкретных сценариях нам может потребоваться выполнить более точную сортировку результатов поиска в зависимости от потребностей бизнеса. В настоящее время Elasticsearch предоставляет функции пользовательской оценки (Function Score Query) и оценки сценариев (Script Score) для удовлетворения этих сложных потребностей. В этой статье подробно описано, как настроить оценку и оценку сценариев в Elasticsearch.

1. Индивидуальная оценка (запрос оценки функции)

1.1 Определение и принцип

Пользовательская оценка позволяет нам изменять оценку по умолчанию для каждого документа на основе набора предопределенных функций. Эти функции могут рассчитывать новые рейтинги на основе значений полей документа, критериев запроса или других факторов. В конечном итоге Elasticsearch объединит исходную оценку с пользовательской оценкой, чтобы определить рейтинг результатов поиска.

1.2 Часто используемые функции

Elasticsearch предоставляет множество встроенных функций для индивидуальной оценки, включая, помимо прочего:

  • масса: присвоение одинакового веса всем совпадающим документам.
  • field_value_factor: Рассчитать рейтинг на основе значений полей в документе.
  • random_score: создать случайную оценку для документа.
  • функция_распада: вычисление показателя затухания на основе расстояния между документом и определенной точкой (например, географическое положение, время и т. д.). Общие функции затухания включают гауссову (гаусс), линейную (линейную), экспоненциальную (exp) и т. д.
  • оценка_сценария: Используйте собственные скрипты для расчета рейтингов.

1.3 Пример

Предположим, у нас есть веб-сайт электронной коммерции, и пользователи хотят учитывать как цену продукта, так и его рейтинг при поиске продуктов.мы можем использоватьfunction_scoreЗапрос для достижения этого требования:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "name": "手机"
        }
      },
      "functions": [
        {
          "field_value_factor": {
            "field": "price",
            "modifier": "reciprocal",
            "params": {
              "scale": 100
            }
          }
        },
        {
          "field_value_factor": {
            "field": "rating",
            "missing": 1.0
          }
        }
      ],
      "score_mode": "sum",
      "boost_mode": "replace"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

В этом примере мы используемfield_value_factor Функция вычисляет индивидуальный рейтинг на основе цены и рейтинга товара. Цены используют обратный распад (reciprocal ), чтобы продукт с более низкой ценой имел более высокий балл; для оценки напрямую использовалось значение поля; Наконец, мы добавляем рейтинги обеих функций и заменяем исходные рейтинги.

2. Оценка сценария

2.1 Определение и принцип

Оценка сценариев позволяет нам использовать собственный язык сценариев (например, Painless) для расчета оценки документа. Этот подход обеспечивает максимальную гибкость и позволяет рассчитывать баллы практически на основе любой логики.

2.2 Пример

Предположим, мы хотим скорректировать рейтинг в зависимости от количества товара на складе. Продукты с меньшим запасом будут иметь более высокие рейтинги.мы можем использоватьscript_scoreфункция для достижения этого требования:

GET /products/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "name": "手机"
        }
      },
      "functions": [
        {
          "script_score": {
            "script": {
              "source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
              "lang": "painless"
            }
          }
        }
      ],
      "score_mode": "multiply",
      "boost_mode": "replace"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

В этом примере мы используем язык сценариев Painless для расчета рейтинга. Скрипт определяет количество товара на складе (doc['stock'].value ) вычисляет оценку: чем больше количество запасов, тем ниже оценка, чем меньше количество запасов, тем выше оценка. Затем мы умножаем этот балл на исходный рейтинг, чтобы скорректировать окончательный рейтинг результатов поиска.

3. Резюме

Пользовательская оценка и оценка сценариев — это мощные функции Elasticsearch, которые позволяют нам уточнять результаты поиска в соответствии с потребностями бизнеса. Рационально используя эти функции, мы можем улучшить пользовательский опыт и удовлетворить разнообразные потребности пользователей. Однако следует отметить, что пользовательская оценка и оценка сценариев могут увеличить сложность запроса и вычислительные затраты, поэтому в практических приложениях необходимо взвешивать все за и против и использовать их с осторожностью.