弹性搜索删除查询多个字词


Elastic Search deleteByQuery multiple terms

我在弹性搜索中复制MySQL删除查询时遇到问题,我正在使用以下文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html 使用Laravel的PHP包装器。

我正在尝试这个:

$this->es->deleteByQuery([
    'index' => 'users',
    'type'  => 'user',
    'body'  => [
        'query' => [
                            'term' => ['field1' => $this->field1],
                            'term' => ['field2' => $this->field2],
                            'term' => ['temp' => 0]
        ]
    ]
]);

它假设是从用户中删除,其中字段 1 = $this->字段 1 和字段 2 = $this->字段 2...

我在将 WHERE AND 语法转换为弹性搜索时遇到问题。

有什么帮助吗?

你的第二条评论基本上是正确的:

我想我现在过火了。我有正文=>查询=> 过滤器 => 过滤 => 布尔值 => 必须 =>项,项,项。我需要 过滤器 => 过滤数组?

bool筛选器优于bool查询,因为筛选通常比查询快得多。 在您的情况下,您只是过滤具有各种术语的文档,并且不希望它们对分数产生影响,因此过滤是正确的方法。

但是,这应该通过query子句来完成,因为顶级filter子句用于不同的目的(过滤分面/聚合...实际上,它在 1.0 中被重命名为 post_filter,以表示它是一个"过滤后"操作)。

您的查询应如下所示:

$this->es->deleteByQuery([
    'index' => 'users',
    'type'  => 'user',
    'body'  => [
        'query' => [
            'filtered' => [
                'filter' => [
                    'must' => [
                        ['term' => ['field1' => $this->field1]],
                        ['term' => ['field2' => $this->field2]],
                        ['term' => ['temp' => 0]]
                    ]
                ]
            ]       
        ]
    ]
]);