我正在使用带有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客户端。另外请告诉我你是否有更好的方法解决这个问题。谢谢!
答案 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应该记录下来。