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

时间:2018-06-22 07:59:55

标签: elasticsearch elasticsearch-5

我需要在Elasticsearch 5.X中更新文档(批量)

条件

  1. 我必须根据组ID更新组名。
  2. 一个区块将具有多个组ID区块。
  3. 我只需要更新组名245的组名。如果我更新一个块,则另一个块不应受到影响。应该保持原样。
  4. 我必须批量更新它们。

    {
    "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"
                    }
                }]
            }]
        }
    }]
    

    }

1 个答案:

答案 0 :(得分:0)

您可以使用update by query 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"
    }
  }
}