Объясним BM25 и вклад полей без превращения score в универсальную метрику качества.
Примеры course-products используют учебную схему и товар из главы 5 «Mapping и типы полей». Разборы упражнений ниже используют отдельный публичный набор тренажёра.
- Интуиция BM25
- Вклад полей и альтернатив
- Объяснение и сравнение оценок
Объясним BM25 и вклад полей без превращения score в универсальную метрику качества.
Курс ориентирован на Elasticsearch 9.4.3. Разборы упражнений используют публичный набор products; остальные запросы показывают отдельные учебные индексы и могут требовать подготовки или прав, недоступных в тренажёре. Ответы сокращены, score может меняться. Для расширенных функций проверяйте лицензию и вариант развёртывания.
Интуиция BM25
Редкий терм обычно различает документы лучше частого. Повторение терма усиливает сигнал с насыщением, а длина поля влияет на нормализацию. Поэтому короткое название с нужными словами может обойти длинное описание. BM25 не знает маржу, остаток и намерение пользователя, пока вы не выразили нужные данные и правила отдельно.
СамопроверкаВклад полей и альтернатив
Boost повышает относительный вклад условия, но не создаёт совпадение там, где его нет. dis_max выбирает сильнейшую ветвь, tie_breaker добавляет долю остальных. Усиление точной фразы в should позволяет ранжировать близкие совпадения выше, не превращая фразу в обязательное ограничение. Все коэффициенты проверяют на наборе запросов, а не одном удачном примере.
СамопроверкаОбъяснение и сравнение оценок
_explain разбирает оценку одного документа для заданного запроса. Score зависит от запроса, статистики индекса, полей и распределения по шардам. Порог вроде _score>10 не означает одинаковое качество для любых запросов. Для некоторых диагностических задач dfs_query_then_fetch уточняет распределённую статистику за дополнительный проход; это не замена оценки качества.
Explain — диагностический API для конкретного документа, а не пользовательская выдача.
{
"query": {
"match": {
"name": "wireless"
}
}
}Как читать результат
Explain — диагностический API для конкретного документа, а не пользовательская выдача.
Разбор на примере каталога
Пусть точное название наушников находится в коротком name, а популярный аксессуар многократно упоминает headphones в длинном description. Одной частоты слов недостаточно для желаемого порядка. Разделите поля, проверьте анализ и добавьте разумный вклад name или совпадения фразы. Затем разберите обе оценки через _explain. Если подходящего товара вообще нет среди кандидатов, настройка весов не решит проблему: сначала исправляют retrieval, а затем ranking.
СамопроверкаПриоритет названия
В multi_match запись name^3 увеличивает вес name относительно description без boost. Пример ищет travel по обоим полям. Boost меняет вклад поля, но не даёт универсальной гарантии, что любое совпадение названия всегда выше любого совпадения описания при любых текстах и статистике корпуса.
Не умножайте отображённый _score вручную и не сравнивайте с жёстко заданной целью. Движок вычисляет оценку по запросу и индексу. Задание на релевантность проверяет отношения порядка и нужную конструкцию. В условии может требоваться конкретный boost, даже если другое значение кажется разумным.
Разберём другой сценарий
{
"query": {
"multi_match": {
"query": "travel",
"fields": [
"name^3",
"description"
]
}
},
"size": 2,
"_source": [
"name",
"description"
]
}Ответ Elasticsearch
{
"hits": {
"total": {
"value": 178,
"relation": "eq"
},
"hits": [
{
"_id": "3",
"_score": 4.8997154,
"_source": {
"name": "Sony Travel Speaker 3",
"description": "Precision equipment for professionals"
}
},
{
"_id": "13",
"_score": 4.8997154,
"_source": {
"name": "Apple Travel Speaker 13",
"description": "Premium wireless sound for travel"
}
}
]
}
}Как читать результат
Числовые оценки относятся к одному запуску, а не являются постоянным эталоном. Посмотрите, в каком поле есть travel, затем сравните с запросом без boost, чтобы увидеть влияние на порядок.
Самопроверка
Сначала ответьте самостоятельно, затем раскройте объяснение.
1. Почему редкие слова важны?
Они сильнее отличают подходящие документы от остальных.
2. Рост частоты даёт линейный рост BM25?
Нет, вклад частоты насыщается.
3. Boost исправит отсутствие терма?
Нет, он меняет вклад только совпавшего условия.
4. Можно сравнивать score разных запросов?
Как универсальную меру качества — нет.
5. Чем объяснять оценку одного товара?
Через _explain с тем же запросом и индексом.
Краткая памятка
- Они сильнее отличают подходящие документы от остальных.
- Нет, вклад частоты насыщается.
- Нет, он меняет вклад только совпавшего условия.
- Как универсальную меру качества — нет.
- Через _explain с тем же запросом и индексом.
Официальная документация
Готовы применить знания?
Подтвердите прочтение, чтобы сохранить своё место. Чтение и решение заданий учитываются отдельно в этом браузере с помощью гостевой cookie.