通过查询更新(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: 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);

而已。到目前为止,它并不容易且没有很好的文档记录。

以上是 通过查询更新(updateByQuery)Elasticsearch-PHP 的全部内容, 来源链接: utcz.com/qa/430982.html

回到顶部