Контекст запроса и фильтра
Запросы состоят из условий (query clauses), которые могут выполняться в Контексте фильтра - проверяет соответствие документа условию Да/Нет и Контексте запроса - оценивает степень соответствия документа условию с расчетом релевантности
Основные концепции
Запросы состоят из условий (query clauses), которые могут выполняться в:
- Контексте фильтра - проверяет соответствие документа условию (“Да/Нет”)
- Контексте запроса - оценивает степень соответствия документа условию с расчетом релевантности
Оценка релевантности (_score)
Релевантность измеряется числовым значением в поле _score
:
"hits" : [
{
"_index" : "shakespeare",
"_id" : "32437",
"_score" : 18.781435,
"_source" : {
"type" : "line",
"line_id" : 32438,
"play_name" : "Hamlet",
"speech_number" : 3,
"line_number" : "1.1.3",
"speaker" : "BERNARDO",
"text_entry" : "Long live the king!"
}
},
...
Чем выше значение _score
, тем более релевантен документ. Разные типы запросов используют различные алгоритмы расчета релевантности, но все учитывают тип контекста выполнения условия.
Контекст фильтра
Характеристики:
- Возвращает только факт соответствия (бинарный результат)
- Не вычисляет оценку релевантности
- Оптимален для точных значений
- Результаты кэшируются для повышения производительности
Пример использования:
GET students/_search
{
"query": {
"bool": {
"filter": [
{ "term": { "honors": true }},
{ "range": { "graduation_year": { "gte": 2020, "lte": 2022 }}}
]
}
}
}
Этот запрос ищет студентов:
- С отличием (
honors: true
) - Выпустившихся в 2020-2022 годах
Контекст запроса
Характеристики:
- Оценивает степень соответствия документа
- Возвращает численную оценку релевантности
- Используется для полнотекстового поиска
- Поддерживает анализ текста (морфологию, синонимы)
Пример использования:
GET shakespeare/_search
{
"query": {
"match": {
"text_entry": "long live king"
}
}
}
Этот запрос:
- Ищет вариации фразы “long live king”
- Учитывает словоформы и синонимы
- Сортирует результаты по релевантности
Особенности вычисления _score
- Используется 24-битная точность (числа с плавающей запятой)
- При превышении точности может происходить потеря данных
- Разные типы запросов используют различные алгоритмы расчета
Рекомендации по применению:
- Для точных значений (ID, даты, категории) используйте контекст фильтра
- Для текстового поиска применяйте контекст запроса
- Комбинируйте оба подхода в сложных запросах через
bool
запрос