2013-12-17 4 views
2

В ES применяются фильтры перед запросом?Как применяются фильтры в Elastic Search?

Скажем, например, я делаю очень медленный нечеткий поиск, но я делаю это только на небольшом диапазоне дат. Например, вы можете посмотреть ниже (PHP):

$res=$client->search(array('index' => 'main', 'body' => array(
    'query' => array(
    'bool' => array(
     'should' => array(
      array('wildcard' => array('title' => '*123*')), 
     ) 
    ) 
    ), 
    'filter' => array(
     'and' => array(
      array('range' => array('created' => array('gte' => date('c',time()-3600), 'lte' => date('c',time()+3600)))) 
     ) 
    ), 
    'sort' => array() 
))); 

Будет ли фильтр применяться до попытки поиска более медленного поиска?

Логика будет определять, что фильтры запускаются, а затем запрос, но я хотел бы быть уверенным.

ответ

2

Если вы используете filtered -query, фильтры будут применяться до того, как будут забиты документы.

Это, как правило, ускоряет работу довольно много. Тем не менее, нечеткий запрос все равно будет использовать вход для построения большего запроса независимо от фильтров.

При использовании filter права на search объекте, то запрос будет первым работать без соблюдения фильтра, то документы будет отфильтрован из хитов - тогда фасеты останутся без фильтрации.

Следовательно, вы должны почти всегда использовать filtered -query, по крайней мере, когда вы не используете грани.

+0

Спасибо, хорошо, что я спросил :) – Sammaye

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