一尘不染

更新Elasticsearch文档

elasticsearch

该代码按预期工作。但是,我不想更新第三个国家作为另一个文档,而是要更新第一个文档。

DELETE /test_index

PUT /test_index

PUT /test_index/doc/1
{
   "parent": [
      {
         "name": "India",
         "label": "IN"
      },
      {
         "name": "China",
         "label": "CN"
      }
   ]
}

PUT /test_index/doc/2
{
   "parent": [
      {
         "name": "Pakistan",
         "label": "PK"
      }
   ]
}

这样,文档ID 1将有3个国家:印度,中国和巴基斯坦。我想我需要使用doc_as_upsert参数更新API。但是我不确定如何编写JSON。


阅读 504

收藏
2020-06-22

共1个答案

一尘不染

您可以使用update
API
进行脚本更新:

curl -XPOST 'localhost:9200/test_index/doc/1/_update' -d '{
    "script" : {
        "inline": "ctx._source.parent += ['name': name, 'label': label]",
        "params" : {
            "name" : "Pakistan",
            "label": "PK"
        }
    }
}'

更新

如果要在批量查询中使用它,也可以

curl -XPOST 'localhost:9200/test_index/doc/_bulk' -d '
{ "update" : { "_id" : "1"} }
{ "script" : { "inline": "ctx._source.parent += ['name': name, 'label': label]", "lang" : "groovy", "params" : {"name" : "Pakistan", "label": "PK"}}}
'
2020-06-22