我正在通过查询作为任务(wait_for_completion=false)运行更新,并使用“conflicts= proceed”。我确实希望有时会发生版本冲突,并且可以在get task response(/task/task-id)中看到该信息。我计划重新处理冲突的记录。
问题:当版本冲突发生时,我没有看到'failures'数组下的冲突记录id让我能够重新处理。非常感谢这方面的任何建议。
"response" : {
"took" : 69055,
"timed_out" : false,
"total" : 286164,
"updated" : 285885,
"created" : 0,
"deleted" : 0,
"batches" : 287,
"version_conflicts" : 279,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled" : "0s",
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until" : "0s",
"throttled_until_millis" : 0,
"failures" : [ ]
}
字符串
注意:另一个观察结果是,如果我们使用'conflicts= abort'运行它,那么我们会在响应中看到预期的失败信息。
下面是正在使用的查询模板的更新,
{
"conflicts": "proceed",
"query": {
"term": {
"location_id": {
"value": 121
}
}
},
"script": {
"params": {},
"source": "ctx._source.sys_updated_at = new Date();ctx._source.location_name = 'New York';"
}
}
型
1条答案
按热度按时间ttygqcqt1#
您可以做的是修改查询以添加一个检查
location_name
是否不是New York
的约束,因为发生冲突的文档没有更新此字段。所以在下一次运行时,只有那些冲突的会被更新,你可以重新运行几次,直到你没有冲突。
查询应该是这样的(也许你的字段被称为
location_name.keyword
):字符串