ES 是否支持将新项目添加到现有文档的嵌套字段中?



我有一个这样的ES文档。

{
"title": "Nest eggs",
"comments": [ 
{
"name":    "John Smith",
"comment": "Great article",
},
{
"name":    "Alice White",
"comment": "More like this please",
}
]
}

现在我想在此文档中添加新的"注释",最终该文档将是

{
"title": "Nest eggs",
"comments": [ 
{
"name":    "John Smith",
"comment": "Great article",
},
{
"name":    "Alice White",
"comment": "More like this please",
},
{
"name":    "New guy",
"comment": "something here",
}
]
}

我不想在每次追加期间提供现有的"注释"对象,因此每次向此嵌套字段添加新对象的最佳方法应该是什么。

我的解决方案:

POST test_v2/_update/Z_nM_2wBjkGOA-r6ArOb
{
"script": {
"lang": "painless",
"inline": "ctx._source.nested_field.add(params.object)",
"params": {
"object": {
"model" : "tata nano",
"value" : "2"
}
}
}
}

检查脚本本身中的空字段。如果字段不存在,则首先创建该字段

POST test3/_update/30RaAG0BY3127H1HaOEv
{
"script": {
"lang": "painless",
"inline": "if(!ctx._source.containsKey('comments')){ctx._source['comments']=[]}ctx._source.comments.add(params.object)",
"params": {
"object": {
"model": "tata nano",
"value": "2"
}
}
}
}

最新更新