遍历数组update_by_query

时间:2019-02-05 16:26:02

标签: elasticsearch

我在特定索引的所有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": {}
  }
}

执行上述代码时,我得到了空指针异常。我想我的语法可能略有偏离。使它无法正常工作很麻烦,不胜感激。

1 个答案:

答案 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": {}
  }
}