2015-08-19 2 views
4

Скажем, у меня подобная ситуация объясняется здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-post-filter.htmlElasticSearch: post_filter или фильтр?

Перед тем, как наткнулся на эту статью, я использовал фильтр вместо post_filter для такого рода сценария, и он произвел выход так же, как post_filter.

Мой вопрос: они одно и то же? Если нет, какой из них рекомендуется и эффективнее использовать и почему?

ответ

8

Насколько поиск хитов, то они одно и то же, то есть хиты вы получаете будут правильно фильтруются в соответствии с любой из вашего фильтра в filtered запроса или фильтра в вашем post_filter.

Однако, что касается скопления, конечный результат будет не таким. Разница между обоими параметрами зависит от того, какой документ устанавливает агрегаты.

Если ваш фильтр находится в запросе filtered, то ваши агрегирования будут вычисляться по набору документов, выбранному запросом (-ями) и фильтром (-ами) в вашем запросе filtered, то есть тот же набор документов, который вы будете получить ответ.

Если ваш фильтр находится в post_filter, то ваши агрегации будут вычисляться по набору документов, выбранному вашим различным запросом (-ями). После того, как агрегирования были рассчитаны по этому набору документов, последний фильтруется фильтрами (фильтрами) в вашем post_filter перед возвратом соответствующих документов.

Подводя итог,

  • filtered запроса влияет результатов поиска и агрегирование
  • в то время как post_filterвлияет только на результатах поиска, но не агрегирование
+0

Так как 'отфильтрованный' устарел в ES 2.0. Из-за этого есть какие-то изменения? –

+2

@AnimeshPandey В ES 2.x (и далее) просто замените «отфильтрованный» запрос на запрос «bool/filter», а остальные все еще применяются. – Val

3

В мои тесты, я мог найти фильтр, который ведет себя точно как post_filter. Оба они влияют только на раздел хитов.

+0

Спасибо! Я так старался найти разницу, пока не увидел этот пост и переключил передачу, чтобы найти [Issue: Rename filter param для поиска api "post_filter"] (https://github.com/elastic/elasticsearch/issues/4119Z), который подтвердил это. – eemp

Смежные вопросы