一尘不染

通过查询更新(updateByQuery)Elasticsearch-PHP

elasticsearch

我正在使用 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);

基本上我想更新几个与某个查询匹配的 文档 字段(名称,价格)

谢谢。


阅读 911

收藏
2020-06-22

共1个答案

一尘不染

因此,借助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);

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

2020-06-22