通过查询更新:如果一项或多项不匹配,则包含多个语句的内联脚本ctx失败?

时间:2019-05-21 08:25:25

标签: elasticsearch

我在下面的内联脚本中使用按查询进行更新,以弹性地更新.map和时间戳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'];" } } 。因此,无论何时遇到此类文档,它都将失败并使用空指针表达式。有没有办法忽略此类文档并更新找到的文档?

编辑:发布以下错误:

  

{“错误”:{       “根本原因”: [         {           “ type”:“ script_exception”,           “ reason”:“运行时错误”,           “ 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”,       “ reason”:“运行时错误”,       “ 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”:“无痛”,       “ caused_by”:{         “ type”:“ null_pointer_exception”,         “原因”:null       }},“状态”:500}

期望的是,如果其中一个ID没有字段lastModifiedDate,我希望忽略它,并且脚本希望更新找到字段fields的其余文档。这可能吗?

1 个答案:

答案 0 :(得分:1)

然后只需像这样更新脚本:

"source": "ctx._source.approved = true; if (ctx._source.fields != null) { ctx._source.fields.lastModifiedDate = ['2019-05-21T06:16:05.133Z'];}"