如何在弹性搜索中应用过滤器?

时间:2013-12-17 12:54:28

标签: php 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()
)));

在尝试慢速搜索之前是否会应用过滤器?

逻辑将决定运行过滤器然后查询,但我想确定。

1 个答案:

答案 0 :(得分:2)

如果您使用filtered - 查询,则会在文档评分之前应用过滤器。

这通常可以加快速度。但是,无论过滤器如何,模糊查询仍将使用输入来构建更大的查询。

当您在filter对象上使用search时,查询将首先运行而不考虑过滤器,然后文档将从 hits 中过滤掉 - 而方面将保持未经过滤。

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