Фильтр в OpenSearch - это применение некоторых условий внутри запроса, которые используются для сужения набора совпадающих результатов.
Для чего он используется?
При выполнении запроса OpenSearch по умолчанию вычисляет балл релевантности совпадающих документов. Однако в некоторых случаях вычисление баллов не требуется, например, если документ попадает в диапазон двух заданных временных меток. Для всех этих критериев "Да/Нет" используется условие фильтрации.
Примеры
Вернуть все результаты по заданному индексу, которые попадают в диапазон дат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | GET my_index/_search { "query": { "bool": { "filter": { "range": { "created_at": { "gte": "2020-01-01", "lte": "2020-01-10" } } } } } } |
Примечания
- Запросы используются для определения степени релевантности документа определенному запросу путем вычисления оценки для каждого документа, в то время как фильтры используются для соответствия определенным критериям и кэшируются для более быстрого выполнения.
- Фильтры не участвуют в подсчете баллов и поэтому выполняются быстрее.
Общие проблемы
- Наиболее распространенной проблемой, связанной с фильтрами, является их неправильное использование внутри запроса. При неправильном использовании фильтров производительность запроса может значительно снизиться. Поэтому фильтры должны использоваться везде, где есть возможность не вычислять оценку.
- Другая проблема часто возникает при использовании фильтров диапазона дат, если для обозначения текущего времени используется "now". Следует отметить, что "сейчас" постоянно меняет временную метку, и поэтому OpenSearch не может использовать кэширование ответа, так как набор данных будет постоянно меняться.