在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()
)));
在尝试慢速搜索之前是否会应用过滤器?
逻辑将决定运行过滤器然后查询,但我想确定。
答案 0 :(得分:2)
如果您使用filtered
- 查询,则会在文档评分之前应用过滤器。
这通常可以加快速度。但是,无论过滤器如何,模糊查询仍将使用输入来构建更大的查询。
当您在filter
对象上使用search
时,查询将首先运行而不考虑过滤器,然后文档将从 hits 中过滤掉 - 而方面将保持未经过滤。
因此,您几乎应该始终使用filtered
- 查询,至少在您不使用构面时。