Итерация по массиву update_by_query - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть массив с именем 'tags' в источнике всех моих документов 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 голосов
/ 06 февраля 2019

Я исправил проблему ... было несколько небольших синтаксических ошибок, но мне нужно было добавить проверку существования:

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": {}
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...