在我的Elastic Search upsert脚本中,如何参考upsert的内容?

时间:2019-03-21 08:08:12

标签: elasticsearch

示例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个字段,并且我认为放置所有文档详细信息并不是一个好计划放入paramsupsert中,以便将其插入的脚本。

最糟糕的情况是我可以写:

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" : {}
}

但这真的……也不是很好。

0 个答案:

没有答案