我需要更新很多已插入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和代码简化。
我找到了解决方案。这是一种名为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);"