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

回到顶部