一尘不染

elasticsearch中如何应用过滤器?

elasticsearch

在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()
)));

在尝试进行较慢的搜索之前,是否会应用过滤器?

逻辑将要求先运行筛选器,然后再运行查询,但是我想确定一下。


阅读 179

收藏
2020-06-22

共1个答案

一尘不染

如果使用filtered-query,则会在对文档计分之前应用过滤器。

通常,这会大大加快速度。但是,模糊查询将仍然使用输入来构建更大的查询,而与过滤器无关。

当您filtersearch对象上使用权时,查询将首先运行而不考虑过滤器,然后将文档从 匹配中 过滤掉-而构面将保持未过滤状态。

因此,filtered至少在不使用构面时,几乎应始终使用-query。

2020-06-22