我在弹性搜索中复制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]]
]
]
]
]
]
]);