示例upsert是:
POST test/_doc/1/_update
{
"script" : {
"source": "ctx._source.counter += params.count",
"lang": "painless",
"params" : {
"count" : 4
}
},
"upsert" : {
"counter" : 1
}
}
很显然,这可以访问现有文档的_source
并对其进行修改,并且可以访问params
来进行此操作。但是,它将如何访问与它一起提交的upsert
对象呢?它似乎不在ctx
中,upsert
也不在_upsert
中,并且不是doc
。
我想引用它,因为我有比示例更多的文档,例如20多个字段,一些嵌套的部分每个都有5个字段,并且我认为放置所有文档详细信息并不是一个好计划放入params
和upsert
中,以便将其插入的脚本。
最糟糕的情况是我可以写:
POST test/_doc/1/_update
{
"scripted_upsert": true,
"script" : {
"source": "if(ctx.op=="create"){ctx._source=params.upsert} else {ctx._source.counter += params.upsert.counter}",
"lang": "painless",
"params" : {
"upsert" : {
"counter" : 1
}
}
},
"upsert" : {}
}
但这真的……也不是很好。