elasticsearch查询脚本与变量

问题描述 投票:0回答:1

我需要更新很多已插入elasticsearch 5.4的文档。我想我在这里缺少一些大概念,因为我需要简单地做一些事情,而我却做不到。

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

我能做到这一点!但问题是代码太长了。我想使用VARIABLE而我不能。我不想重复4次字段ctx._source.req.body.client.id。如果我能做到这一点会更好: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())"
    }
 }

问题是关于VARIABLES和代码简化。

elasticsearch elasticsearch-5
1个回答
0
投票

我找到了解决方案。这是一种名为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);"
© www.soinside.com 2019 - 2024. All rights reserved.