带变量的 elasticsearch 查询脚本

elasticsearch query scripting with variables

我需要更新很多已经插入到 elasticsearch 5.4 上的文档。 我想我在这里遗漏了一些大概念,因为我需要做一些简单的事情,但我做不到。

我需要删除 "req.body.client.id" 的最后 6 个数字并隐藏其余数字(替换为 x)。 示例:9494402234028493247 ---> xxxxxxxxxxxxxx493247

我能做到!但问题是代码太长了。我想使用 VARIABLE 但我不能。我不想重复字段 ctx._source.req.body.client.id 4 次。如果我能这样做会更好: clientId = ctx._source.req.body.client.id 然后在脚本行的其余部分使用 clientId。 正确的做法是什么?

POST my_index/_update_by_query
{
    "query": {
        "regexp":{
            "req.body.client.id":"94944022.*"
        }
    },
    "script": {
        "lang": "painless",
        "inline": "ctx._source.req.body.client.id = 'xxxxxxxxxxx' + ctx._source.req.body.client.id.substring(ctx._source.req.body.client.id.length()-6,ctx._source.req.body.client.id.length())"
    }
 }

问题是关于变量和代码简化。

我找到了解决方案。这是一种叫做 PAINLESS 的语言。正确的方法是:

"String clientId = ctx._source.req.body.client.id; 
int cLen = clientId.length(); 
ctx._source.req.body.client.id = "xxxxxxxxxxx" + clientId.substring(cLen-4,cLen);"