I am using below inline script with update by query to update approved=true
in elastic and the timestamp 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'];"
}
}
The problem is that some documents do not have this field lastModifiedDate
at all. So whenever it encounters such doc, it fails with null pointer expression. Is there a way to ignore such docs and update the one's where it is found?
EDIT: Posting the error that I get below:
{ "error": { "root_cause": [ { "type": "script_exception", "reason": "runtime error", "script_stack": [ "ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];", " ^---- HERE" ], "script": "ctx._source.approved = true; ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];", "lang": "painless" } ], "type": "script_exception", "reason": "runtime error", "script_stack": [ "ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];", " ^---- HERE" ], "script": "ctx._source.approved = true; ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];", "lang": "painless", "caused_by": { "type": "null_pointer_exception", "reason": null } }, "status": 500 }
The expectation is that if one the IDs do not have the field fields
, I want it to be ignored and the script to update the rest of the documents where the field fields
is found. Is this possible?
fields
. Can you show the error you get? – Val