带变量的 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);"
我需要更新很多已经插入到 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);"