我在特定索引的所有Elasticsearch文档的源代码中都有一个名为“标签”的数组。我试图使用update_by_query无痛脚本将标签数组中的所有值小写。
这似乎是一个简单的操作,这是我尝试过的:
POST my_index/_update_by_query
{
"script": {
"source": """
for (int i = 0; i < ctx._source['tags'].length; ++i) {
ctx._source['tags'][i].value = ctx._source['tags'][i].value.toLowerCase()
}
""",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
执行上述代码时,我得到了空指针异常。我想我的语法可能略有偏离。使它无法正常工作很麻烦,不胜感激。
答案 0 :(得分:0)
我已解决此问题...存在多个小语法错误,但我需要添加一个存在检查:
POST my_index/_update_by_query
{
"script": {
"source": """
if (ctx._source.containsKey('tags')) {
for (int i = 0; i < ctx._source['tags'].length; ++i) {
ctx._source['tags'][i] = ctx._source['tags'][i].toLowerCase()
}
}
""",
"lang": "painless"
},
"query": {
"match_all": {}
}
}