моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
В Elasticsearch механизм оценки по умолчанию (например, алгоритм BM25) в большинстве случаев может обеспечить хорошее ранжирование результатов поиска. Однако в некоторых конкретных сценариях нам может потребоваться выполнить более точную сортировку результатов поиска в зависимости от потребностей бизнеса. В настоящее время Elasticsearch предоставляет функции пользовательской оценки (Function Score Query) и оценки сценариев (Script Score) для удовлетворения этих сложных потребностей. В этой статье подробно описано, как настроить оценку и оценку сценариев в Elasticsearch.
Пользовательская оценка позволяет нам изменять оценку по умолчанию для каждого документа на основе набора предопределенных функций. Эти функции могут рассчитывать новые рейтинги на основе значений полей документа, критериев запроса или других факторов. В конечном итоге Elasticsearch объединит исходную оценку с пользовательской оценкой, чтобы определить рейтинг результатов поиска.
Elasticsearch предоставляет множество встроенных функций для индивидуальной оценки, включая, помимо прочего:
Предположим, у нас есть веб-сайт электронной коммерции, и пользователи хотят учитывать как цену продукта, так и его рейтинг при поиске продуктов.мы можем использовать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"
}
}
}
В этом примере мы используемfield_value_factor
Функция вычисляет индивидуальный рейтинг на основе цены и рейтинга товара. Цены используют обратный распад (reciprocal
), чтобы продукт с более низкой ценой имел более высокий балл; для оценки напрямую использовалось значение поля; Наконец, мы добавляем рейтинги обеих функций и заменяем исходные рейтинги.
Оценка сценариев позволяет нам использовать собственный язык сценариев (например, Painless) для расчета оценки документа. Этот подход обеспечивает максимальную гибкость и позволяет рассчитывать баллы практически на основе любой логики.
Предположим, мы хотим скорректировать рейтинг в зависимости от количества товара на складе. Продукты с меньшим запасом будут иметь более высокие рейтинги.мы можем использовать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"
}
}
}
В этом примере мы используем язык сценариев Painless для расчета рейтинга. Скрипт определяет количество товара на складе (doc['stock'].value
) вычисляет оценку: чем больше количество запасов, тем ниже оценка, чем меньше количество запасов, тем выше оценка. Затем мы умножаем этот балл на исходный рейтинг, чтобы скорректировать окончательный рейтинг результатов поиска.
Пользовательская оценка и оценка сценариев — это мощные функции Elasticsearch, которые позволяют нам уточнять результаты поиска в соответствии с потребностями бизнеса. Рационально используя эти функции, мы можем улучшить пользовательский опыт и удовлетворить разнообразные потребности пользователей. Однако следует отметить, что пользовательская оценка и оценка сценариев могут увеличить сложность запроса и вычислительные затраты, поэтому в практических приложениях необходимо взвешивать все за и против и использовать их с осторожностью.