elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

_在elasticserach php客户端中按查询更新

_在elasticserach php客户端中按查询更新,php,elasticsearch,Php,elasticsearch,我正在将elasticsearch 6.2与6.0客户端一起使用。有一种情况我被卡住了。我需要更新字段userid=987,其中userid=123。在这里,我们需要在API中传递文档ID(比如POST-test/\u-doc/1/\u-update)。首先我需要获取\u id,然后我必须使用测试后/\u doc/{\u id}/\u update进行更新查询 不可能每次都生成\u id。这对我没有帮助。 我找到了另一个选择。通过使用以下API,我获得了成功: curl -XPOST 'loc

我正在将elasticsearch 6.2与6.0客户端一起使用。有一种情况我被卡住了。我需要更新字段
userid
=987,其中
userid
=123。在这里,我们需要在
API
中传递文档ID(比如
POST-test/\u-doc/1/\u-update
)。首先我需要获取
\u id
,然后我必须使用
测试后/\u doc/{\u id}/\u update进行更新查询


不可能每次都生成
\u id
。这对我没有帮助。
我找到了另一个选择。通过使用以下API,我获得了成功:

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客户端的
\u update\u by\u query
。另外,如果你们有更好的方法来解决这个问题,请告诉我。谢谢

我得到了解决方案,因此我想与大家分享:

$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应该记录这一点。

我认为elasticsearch php客户端在这里使用逐查询更新,无论如何,我认为这可以解决您的问题problem@Averias请仔细阅读,我在问题中已经提到了这个链接。啊,好吧,我误解了,对不起。在这种情况下,看看这个答案:也许它会有帮助you@Averias在发布此问题之前,已尝试使用Elasticsearch 2.3。我想了解elasticserach 6.xLooking在6.0版的elasticsearch php文档中的情况,似乎他们仍然没有提供任何关于
update\u by\u query
,但我认为上面的链接在使用es PHP6.0时仍然有用。在2.x版中,
update\u by\u query
是一个您应该安装在集群上的插件,但是示例中的查询仍然可以使用,可能您不必触摸
elasticsearch.yml
,因为在6版中是一个内置功能,我很高兴我的建议最终帮助您解决问题。IMHO
ruflin/elastica
是处理ES的更好的PHP软件包,这并不意味着如果存在版本冲突,将不会进行更新?