Elasticsearch:嵌套对象中的remove / update字段
{ "_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脚本更新字段。
$ 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 执行删除,则我的记录应如下所示
{ "_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
}
}'
以上是 Elasticsearch:嵌套对象中的remove / update字段 的全部内容, 来源链接: utcz.com/qa/423748.html