我需要更新许多已经插入Elasticsearch 5.4的文档。 我想我在这里遗漏了一些BIG概念,因为我只需要做一些简单的事情,而我做不到。
我需要剪切“ req.body.client.id”的最后6个数字,然后隐藏其余的数字(用x代替)。 例如:9494402234028493493 ---> 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())"
}
}
问题在于变量和代码简化。
答案 0 :(得分: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);"