我在弹性搜索中复制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]
]
]
]);
它假设是DELETE FROM用户WHERE field1 = $ this-> field1 AND field2 = $ this-> field2 ...
我无法将WHERE AND语法翻译为弹性搜索。
任何帮助?
答案 0 :(得分:0)
你的第二条评论大多是正确的:
我想我现在已经过火了。我有body => query => filter => filtered => bool =>必须=>期限,期限,期限。我需要吗? filter =>过滤后的数组?
bool
过滤器优于bool
查询,因为过滤通常比查询快得多。在您的情况下,您只是过滤具有各种术语的文档,并且不希望它们对分数做出贡献,因此过滤是正确的方法。
这应该通过query
子句来完成,但是,因为顶级filter
子句用于不同的目的(过滤facet / aggregations ...它实际上已重命名为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]]
]
]
]
]
]
]);