Контекст запроса и фильтра
Оценки релевантности
По умолчанию Elasticsearch сортирует результаты поиска, соответствующие запросу, по оценке релевантности, которая измеряет, насколько хорошо каждый документ соответствует запросу.
Оценка релевантности — положительное число с плавающей точкой, возвращаемое в поле метаданных _score API search. Чем выше _score, тем более релевантен документ. Хотя каждый тип запроса может рассчитывать оценки релевантности по-разному, вычисление оценки также зависит от того, выполняется ли условие запроса в контексте запроса или фильтра.
Контекст запроса
В контексте запроса условие запроса отвечает на вопрос «Насколько хорошо этот документ соответствует этому условию запроса?» Помимо определения того, соответствует ли документ условию, условие запроса также рассчитывает оценку релевантности в поле метаданных _score.
Контекст запроса действует всякий раз, когда условие запроса передаётся в параметр query, такой как параметр query в API search.
Контекст фильтра
В контексте фильтра условие запроса отвечает на вопрос «Соответствует ли этот документ этому условию запроса?» Ответ прост — Да или Нет — оценки не рассчитываются. Контекст фильтра в основном используется для фильтрации структурированных данных, например:
- Принадлежит ли этот
timestampдиапазону с 2015 по 2016 год? - Установлено ли поле
statusв значение"published"?
Часто используемые фильтры автоматически кэшируются Elasticsearch для повышения производительности.
Контекст фильтра действует всякий раз, когда условие запроса передаётся в параметр filter, такой как параметры filter или must_not в запросе bool, параметр filter в запросе constant_score или агрегация filter.
Пример контекстов запроса и фильтра
Ниже приведен пример использования условий запроса в контекстах запроса и фильтра в API search. Этот запрос будет соответствовать документам, удовлетворяющим всем следующим условиям:
- Поле
titleсодержит словоsearch. - Поле
contentсодержит словоelasticsearch. - Поле
statusсодержит точное словоpublished. - Поле
publish_dateсодержит дату с 1 января 2015 года.
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "Search" }},
{ "match": { "content": "Elasticsearch" }}
],
"filter": [
{ "term": { "status": "published" }},
{ "range": { "publish_date": { "gte": "2015-01-01" }}}
]
}
}
} | Параметр | |
| Условия | |
| Параметр |
Оценки, рассчитанные для запросов в контексте запроса, представлены числами с плавающей точкой одинарной точности; они имеют только 24 бита для точности значащей части. Вычисления оценок, которые превышают точность значащей части, будут преобразованы в числа с плавающей точкой с потерей точности.
Используйте условия запроса в контексте запроса для условий, которые должны повлиять на оценку соответствия документов (т. е. насколько хорошо документ соответствует), и используйте все другие условия запроса в контексте фильтра.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-filter-context.html