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

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

Скажем, например, я делаю очень медленный нечеткий поиск, но я делаю это только на небольшом диапазоне дат. Например, вы можете посмотреть ниже (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() ))); 

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

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

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

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

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

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