通过查询更新(updateByQuery)Elasticsearch-PHP
我正在使用 和 。该
是给我的烦恼在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
脚本以允许脚本。最后添加以下几行。
script.engine.groovy.inline.search: onscript.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);
而已。到目前为止,它并不容易且没有很好的文档记录。
以上是 通过查询更新(updateByQuery)Elasticsearch-PHP 的全部内容, 来源链接: utcz.com/qa/430982.html