首页 > 解决方案 > 在我的 Elastic Search upsert 脚本中,如何引用 upsert 内容?

问题描述

示例更新插入是:

POST test/_doc/1/_update
{
    "script" : {
        "source": "ctx._source.counter += params.count",
        "lang": "painless",
        "params" : {
            "count" : 4
        }
    },
    "upsert" : {
        "counter" : 1
    }
}

显然,这可以访问_source预先存在的文档并对其进行修改,并且它可以访问params来执行此操作。但是它将如何访问与upsert它一起提交的对象呢?它似乎不在ctxas中,upsert也不_upsertdoc.

我想参考它,因为我有一个比示例更复杂的文档,比如 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" : {}
}

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

标签: elasticsearch

解决方案


推荐阅读