Обновление скрипта с использованием метода array unique (), вызывающего ошибку - PullRequest
1 голос
/ 23 сентября 2019

Мне нужно обновить значение массива другим массивом, а затем удалить пересечения, поэтому я нашел этот метод «unique ()» для сценариев эластичного поиска, но он вызывает ошибку:

{
  "error": {
    "root_cause": [
      {
        "type": "remote_transport_exception",
        "reason": "[probook][127.0.0.1:9300][indices:data/write/update[s]]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "failed to execute script",
    "caused_by": {
      "type": "script_exception",
      "reason": "runtime error",
      "script_stack": [
        "ctx._source.arrFieldName = ctx._source.arrFieldName.unique();",
        "                                                     ^---- HERE"
      ],
      "script": "ctx._source.arrFieldName.addAll([111, 222, 333]);ctx._source.arrFieldName = ctx._source.arrFieldName.unique();ctx._source.arrFieldNameCount = ctx._source.arrFieldName.length",
      "lang": "painless",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "dynamic method [java.util.ArrayList, unique/0] not found"
      }
    }
  },
  "status": 400
}

1 Ответ

1 голос
/ 23 сентября 2019

Вы должны сделать это так с distinct() вместо unique() для встроенного безболезненного скрипта,

{
  "script" : {
      "inline": "ctx._source.arrFieldName=
                ctx._source.arrFieldName.stream().distinct().sorted()
                                      .collect(Collectors.toList())"
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...