我正在使用 Elasticsearch 2.3 和 官方php驱动程序 。该 updateByQuery 是给我的烦恼在PHP中使用。对于如何使用它的一些帮助将不胜感激。
$client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build(); # Request $updateRequest = [ 'index' => 'gorocket', 'type' => 'logs', 'body' => [ 'query' => [ 'filtered' => [ 'filter' => [ 'bool' => [ 'must' => [ [ 'match' => [ 'enabled' => 1 ], ], ] ] ] ] ] ] ] ]; # Update $results = $client->updateByQuery($updateRequest);
基本上我想更新几个与某个查询匹配的 文档 字段(名称,价格)
谢谢。
因此,借助CURL api的工作原理,我设法提出了一种方法。
首先,您需要编辑您的elasticsearch.yml脚本以允许脚本。最后添加以下几行。
elasticsearch.yml
script.engine.groovy.inline.search: on script.engine.groovy.inline.aggs: on script.engine.groovy.inline.update: on
之后,您可以开始使用查询作为下面的示例进行批处理更新。
$client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build(); # Request $updateRequest = [ 'index' => 'testindex', 'type' => 'logs', 'conflicts' => 'proceed', 'body' => [ 'query' => [ 'filtered' => [ 'filter' => [ 'bool' => [ 'must' => [ [ 'match' => [ 'enabled' => 1 ], ], ] ] ] ] ], 'script' => [ 'inline' => 'ctx._source.enabled = value', 'params' => [ 'value' => 0 ] ] ] ] ]; # Update $results = $client->updateByQuery($updateRequest);
而已。到目前为止,它并不容易且没有很好的文档记录。