在elasticserach-php客户端中_update_by_query

时间:2018-03-26 10:06:17

标签: php elasticsearch

我正在使用带有elasticsearch-php 6.0客户端的elasticsearch 6.2。有情况我卡住了。我需要更新字段userid = 987 userid = 123.我浏览了update API,在每个查询中,我们需要在API中传递文档ID(如{{ 1}})。首先,我需要获取POST test/_doc/1/_update,然后我必须使用_id

进行更新查询


每次都不可能产生POST test/_doc/{_id}/_update。它对我没有帮助 我找到了使用_update_by_query的另一种选择。我通过使用以下API获得了成功:

_id

我没有找到任何参考资料,显示我如何使用curl -XPOST 'localhost:9200/my_index/my_type/_update_by_query?pretty' -H 'Content-Type: application/json' -d ' { "query":{ "term":{ "userid":123 } }, "script":{ "lang":"painless", "inline":"ctx._source.userid = params.value", "params":{ "value":987 } } }' 与elasticserach-php客户端。另外请告诉我你是否有更好的方法解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

我得到了解决方案所以我想分享一下:

$client = \Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$update = [
    'index'     => 'my_index',
    'type'      => 'my_type',
    'conflicts' => 'proceed',
    'body' => [
        'query' => [
            'term' => [
                    "userid" => 987
            ]
        ],
        'script' => [
            'lang' => 'painless',
            'inline' => 'ctx._source.userid = params.userid',
                'params' => [
                    'userid' => 123
                ]
            ]
    ]
];
$results = $client->updateByQuery($update);

它解决了我的问题。我认为elasticserach应该记录下来。