在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-query,则会在对文档计分之前应用过滤器。
filtered
通常,这会大大加快速度。但是,模糊查询将仍然使用输入来构建更大的查询,而与过滤器无关。
当您filter在search对象上使用权时,查询将首先运行而不考虑过滤器,然后将文档从 匹配中 过滤掉-而构面将保持未过滤状态。
filter
search
因此,filtered至少在不使用构面时,几乎应始终使用-query。