Elasticsearch: remove/update field inside nested object Elasticsearch: remove/update field inside nested object elasticsearch elasticsearch

Elasticsearch: remove/update field inside nested object


To add a new element to your nested field you can proceed like this:

$ curl -XPOST 'localhost:9200/index/type/1212/_update?pretty' -d '{    "script" : "ctx._source.list_data += newElement",    "params": {        "newElement": {           "list_id" : 121,           "timestamp" : 1469050965        }    }}'

To remove an existing element from your nested field list, you can proceed like this:

$ curl -XPOST 'localhost:9200/index/type/1212/_update?pretty' -d '{    "script" : "ctx._source.list_data.removeAll{it.list_id == remove_id}",    "params": {        "remove_id" : 122    }}'


I don't know why, but I find that

ctx._source.list_data.removeAll{it.list_id == remove_id}

can't work. Instead I use removeIf like this:

ctx._source.list_data.removeIf{list_item -> list_item.list_id == remove_id}

where list_item could be arbitrary string.


I was getting error [UpdateRequest] unknown field [params] as I was using the latest version of ElasticSearch (7.9.0.), seems like the syntax is changed a bit.

Following should work for newer versions of ElasticSearch:

$ curl -XPOST 'localhost:9200/<index-name>/_update/1212'{  "script": {    "source": "ctx._source.list_data.removeIf(list_item -> list_item.list_id == params.remove_id);",    "params": {      "remove_id": 122    }  }}