logstash 如何在elasticsearch中只批量更新一些值?

wsewodh2  于 2022-12-09  发布在  Logstash
关注(0)|答案(1)|浏览(237)

在elasticsearch中,我有像post_en这样的数据作为索引,多个帖子保存在像id, title, description, price, status这样的字段中。
现在我如何可以更新特定的字段只为每个职位与使用批量。(与单一职位,我可以很容易地更新字段。)
下面是一个用于批量请求的json示例。

{"_index":"post_en","_id":"966156"}
{"id":966156,"status":2}
{"_index":"post_en","_id":"966157"}
{"id":966157,"title":"some title","status":1}

使用这个json,它更新了给定的字段,但也删除了其他现有的字段,这意味着整个对象被替换为给定的更新对象。但我只想更新给定的字段,并保持其余字段不变。

fd3cxomn

fd3cxomn1#

您可能需要执行更新而不是插入(doc_as_upsert选项)
在此处引用文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html#bulk-update
更新操作负载支持以下选项:doc(部分文档)、upsert、doc_as_upsert、script、params(用于脚本)、lang(用于脚本)和_source。有关选项的详细信息,请参阅更新文档。

{
    "properties": {
        "id": {
            "type": "long"
        },
        "status": {
            "type": "integer"
        }
    }
}

已创建具有Map的索引
索引2个文档

{"id":966157,"status":2}
{"id":966157,"status":3}

已执行批量操作

{ "update" : {"_id" : "ISpCB4IBCOifrGItSDgU", "_index" : "post_en"} }
{ "doc" : {"status" : "4"} }
{ "update" : {"_id" : "ICpCB4IBCOifrGItKTgF", "_index" : "post_en"} }
{ "doc" : {"status" : "5"} }

搜索时

"hits": [
            {
                "_index": "post_en",
                "_id": "ISpCB4IBCOifrGItSDgU",
                "_score": 1.0,
                "_source": {
                    "id": 966157,
                    "status": "4"
                }
            },
            {
                "_index": "post_en",
                "_id": "ICpCB4IBCOifrGItKTgF",
                "_score": 1.0,
                "_source": {
                    "id": 966156,
                    "status": "5"
                }
            }
        ]

相关问题