{ "_index" : "test", "_type" : "test", "_id" : "1212", "_version" : 5, "found" : true, "_source" : { "count" : 42, "list_data" : [ { "list_id" : 11, "timestamp" : 1469125397 }, { "list_id" : 122, "timestamp" : 1469050965 } ] } }
这是我的文档架构。list_data是嵌套对象。我需要更新/删除其中的特定文件list_data。我能够count使用groovy脚本更新字段。
list_data
count
$ curl -XPOST 'localhost:9200/index/type/1212/_update?pretty' -d ' { "script" : "ctx._source.count = 41" }'
但是不知道如何更新嵌套对象。
例如,我想将此添加到中list_data。
{ "list_id" : 121, "timestamp" : 1469050965 }
并且我的文档应更改为:
{ "_index" : "test", "_type" : "test", "_id" : "1212", "_version" : 6, "found" : true, "_source" : { "count" : 41, "list_data" : [ { "list_id" : 11, "timestamp" : 1469125397 }, { "list_id" : 121, "timestamp" : 1469050965 }, { "list_id" : 122, "timestamp" : 1469050965 } ] } }
如果我基于list_id= 122 执行删除,则我的记录应如下所示
list_id
{ "_index" : "test", "_type" : "test", "_id" : "1212", "_version" : 7, "found" : true, "_source" : { "count" : 41, "list_data" : [ { "list_id" : 11, "timestamp" : 1469125397 }, { "list_id" : 121, "timestamp" : 1469050965 }] } }
要将新元素添加到嵌套字段,您可以像这样进行操作:
$ curl -XPOST 'localhost:9200/index/type/1212/_update?pretty' -d ' { "script" : "ctx._source.list_data += newElement", "params": { "newElement": { "list_id" : 121, "timestamp" : 1469050965 } } }'
要从嵌套字段列表中删除现有元素,可以按以下步骤进行:
$ 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 } }'