Обновление по запросу: встроенный скрипт ctx с несколькими операторами завершится ошибкой, если один или несколько элементов не совпадают? - PullRequest
0 голосов
/ 21 мая 2019

Я использую ниже встроенный скрипт с обновлением по запросу, чтобы обновить approved=true в упругой и метку времени lastModifiedDate.

POST /limp-access/_update_by_query
{
    "query": {
        "terms": {
            "_id": [
                "asdasfasf-laHg5qeld",
                "asdfadfdfdsf-asdasd"
             ]
        }
    },
    "script":{
    "source": "ctx._source.approved = true; ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];"
  }
}

Проблема в том, что некоторые документы вообще не имеют этого поля lastModifiedDate. Поэтому, когда бы он ни встречался с таким документом, он терпел неудачу с выражением нулевого указателя. Есть ли способ игнорировать такие документы и обновлять тот, где он находится?

РЕДАКТИРОВАТЬ: Публикация ошибки, которую я получаю ниже:

{"ошибка": { "первопричина": [ { "type": "script_exception", «причина»: «ошибка времени выполнения», "script_stack": [ "ctx._source.fields.lastModifiedDate = ['2019-05-21T06: 16: 05.133Z'];", "^ ---- ЗДЕСЬ" ], "script": "ctx._source.approved = true; ctx._source.fields.lastModifiedDate = ['2019-05-21T06: 16: 05.133Z'];", "lang": "безболезненно" } ], "type": "script_exception", «причина»: «ошибка времени выполнения», "script_stack": [ "ctx._source.fields.lastModifiedDate = ['2019-05-21T06: 16: 05.133Z'];", "^ ---- ЗДЕСЬ" ], "script": "ctx._source.approved = true; ctx._source.fields.lastModifiedDate = ['2019-05-21T06: 16: 05.133Z'];", "lang": "безболезненно", "вызванный": { "type": "null_pointer_exception", "причина": ноль }}, "status": 500}

Ожидается, что если один из идентификаторов не имеет поля fields, я хочу, чтобы оно было проигнорировано, и скрипт обновил остальные документы, в которых найдено поле fields. Это возможно?

1 Ответ

1 голос
/ 21 мая 2019

Затем просто обновите ваш скрипт следующим образом:

"source": "ctx._source.approved = true; if (ctx._source.fields != null) { ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...