首页 > 解决方案 > 遍历数组 update_by_query

问题描述

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

执行上述代码时出现空指针异常。我想我的语法可能略有偏差。让这个工作有很多麻烦,并希望得到任何帮助。

标签: elasticsearch

解决方案


我解决了这个问题......有多个小的语法错误,但我需要添加一个存在检查:

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

推荐阅读