我建议尝试这样的脚本,该脚本在参数中带有两个参数。它将检查任何嵌套对象是否已经包含给定的id:
- 如果是,它将更新给定
remark
- 如果没有,它将在
test
数组中插入一个新的嵌套对象。
脚本如下所示:
def updated = falsectx._source.test?.each { obj -> if (obj.id == item.id) { obj.remark = item.remark updated = true } }if (!updated) { ctx._source.test = ((ctx._source.test ?: []) + item)}内联并使用适当的分号后,脚本如下所示:
{ "script": "def updated = false; ctx._source.test?.each { obj -> if (obj.id == item.id) { obj.remark = item.remark; updated = true } }; if (!updated) { ctx._source.test = ((ctx._source.test ?: []) + item)}", "params": { "item": { "remark": "addd", "id": "1" } }}


