В 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
запрос, по крайней мере, когда вы не используете грани.