Я не вижу описания того, когда мне следует использовать запрос, фильтр или какую-то их комбинацию. В чем разница между ними? Кто-нибудь может объяснить, пожалуйста?
elasticsearch
Jonesie
источник
источник
Ответы:
Разница проста: фильтры кэшируются и не влияют на оценку, поэтому работают быстрее, чем запросы. Посмотрите здесь тоже. Допустим, запрос обычно является чем-то, что пользователь вводит, и в значительной степени непредсказуемым, в то время как фильтры помогают пользователям сузить результаты поиска, например, используя фасеты.
источник
Вот что говорится в официальной документации:
источник
Пример (попробуйте сами)
Индекс Say
myindex
содержит три документа:Запрос
hello sam
(используя ключевое словоmust
)Документу
"Hello world! I am Sam."
присваивается более высокий балл, чем"Hello world!"
, поскольку первый соответствует обоим словам в запросе. Документы оцениваются.Фильтр
hello sam
(используя ключевое словоfilter
)Документы, которые содержат
hello
илиsam
возвращены. Документы НЕ оцениваются .Если вам не нужен полнотекстовый поиск или оценка, фильтры предпочтительнее, потому что Elasticsearch автоматически использует кешируемые фильтры для повышения производительности. См. Elasticsearch: Запрос и контекст фильтра.
источник
Еще немного дополнений к тому же. Сначала применяется фильтр, а затем запрос обрабатывается по его результатам. Для хранения двоичного соответствия истина / ложь для каждого документа используется нечто, называемое массивом bitSet. Этот массив BitSet находится в памяти, и он будет использоваться со второго раза, когда фильтр запрашивается. Таким образом, используя структуру данных массива bitset, мы можем использовать кэшированный результат.
Здесь следует отметить еще один момент: кэш фильтра создается только тогда, когда запрос выполняется, следовательно, только после второго попадания, мы фактически получаем преимущество кеширования.
Но тогда вы можете использовать более теплый API , чтобы перерасти это. Когда вы регистрируете запрос с фильтром для более теплого API, он будет следить за тем, чтобы он выполнялся для нового сегмента при каждом его запуске. Следовательно, мы получим постоянную скорость от самого первого выполнения.
источник
По сути, запрос используется, когда вы хотите выполнить поиск по документам с оценкой. И фильтры используются, чтобы сузить набор результатов, полученных с помощью запроса. Фильтры логические.
Например, скажем, у вас есть индекс ресторанов что-то вроде Zomato. Теперь вы хотите искать рестораны, которые подают «пиццу» , которая в основном является вашим ключевым словом поиска.
Таким образом, вы будете использовать запрос, чтобы найти все документы, содержащие «пиццу», и некоторые результаты будут получены.
Допустим, вам нужен список ресторанов, где подают пиццу и рейтинг не ниже 4.0.
Так что вам нужно будет использовать ключевое слово «пицца» в своем запросе и применить фильтр для рейтинга как 4.0.
Что происходит, так это то, что фильтры обычно применяются к результатам, полученным путем запроса вашего индекса.
источник
Filters
-> Соответствует ли этот документ? бинарный ответ да или нетQueries
-> Соответствует ли этот документ? Насколько хорошо это соответствует? использует скорингисточник
Начиная с версии 2 Elasticsearch, фильтры и запросы были объединены, и любое условие запроса может использоваться как фильтр или как запрос (в зависимости от контекста). Как и в версии 1, фильтры кэшируются и должны использоваться, если оценка не имеет значения.
Источник: https://logz.io/blog/elasticsearch-queries/
источник