简体   繁体   English

更新具有多个数组的Elasticsearch文档

[英]Update Elasticsearch document which has multiple array

I have a requirement to update document (bulk) in the elasticsearch 5.X 我需要在elasticsearch 5.X中更新文档(批量)

Conditions 条件

  1. I have to update a groupname based on the groupid. 我必须根据组ID更新组名。
  2. A block will have multiple group id block. 一个块将具有多个组ID块。
  3. I need to update group name for only groupid 245.If i update one block another block should not get affected. 我只需要更新组名245的组名。如果我更新一个块,则另一个块不应受到影响。 It should remain as it is. 它应该保持原样。
  4. I have to update them in bulk. 我必须批量更新它们。

     { "hits": [{ "_index": "myindex", "_id": "1", "_source": { "TicketSet": [{ "Tasks": [{ "Group": { "Id": 245, "Name": "Name 245" } }, { "Group": { "Id": 244, "Name": "Name 244" } }] }] } }, { "_index": "myindex", "_id": "3", "_source": { "TicketSet": [{ "Tasks": [{ "Group": { "Id": 245, "Name": "Name 245" } }, { "Group": { "Id": 244, "Name": "Name 244" } }] }] } }] 

    } }

You can do so easily with the update by query API (I made the assumption that ticketdesc is nested ): 您可以通过查询API更新轻松地做到这一点(我假设ticketdescnested ):

POST tickets/_update_by_query
{
  "query": {
     "term": {
       "TicketSet.Tasks.Group.Id": 245
     }
  },
  "script": {
    "inline": "ctx._source.TicketSet[0].Tasks.stream().filter(g -> g.Group.Id == params.groupId).forEach(g -> g.Group.Name = params.newName)",
    "params": {
      "groupId": 245,
      "newName": "New name"
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM