带变量的Elasticsearch查询脚本

时间:2019-03-13 00:32:59

标签: elasticsearch elasticsearch-5

我需要更新许多已经插入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())"
    }
 }

问题在于变量和代码简化。

1 个答案:

答案 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);"