问题描述
我正在尝试使用update_by_query更新文档的嵌套类型字段。我正在使用以下脚本查询:
POST test/_update_by_query
{
"script": {
"source": "ctx._source.address = params.address","params": {
"address": [{"city":"Mumbai"}]
}
},"query": {
"bool": {
"must": [
{
"term": {
"uid": "b123"
}
}
]
}
}
}
但是我遇到以下错误:
version conflict,required seqNo [607],primary term [16]. current document has seqNo [608] and primary term [16]
此问题的原因是什么,我该如何解决?我可以在这里使用其他任何查询来代替_update_by_query吗?请在这里帮助我
解决方法
通过查询更新获取数据快照,然后更新每个匹配的文档。此错误意味着在通过查询调用更新开始运行后,文档已由另一个进程进行了更新...
您可以选择忽略这些冲突问题,方法是:
POST test/_update_by_query?conflicts=proceed
在答复中,您将指出有多少个文档存在冲突,可以根据需要再次通过查询运行更新以将其提取。
更新:
如果您只需要更新一个文档并且知道其ID,则无需使用查询更新,只需使用update endpoint。最大的优点是,更新端点具有一个名为retry_on_conflict
的参数,该参数在发生冲突时将重试该操作,从而可以确保在调用返回时最终对文档进行更新:
POST test/_doc/123/_update?retry_on_conflict=3
{
"doc": {
"address": [{"city":"Mumbai"}]
}
}
,
您可以在查询的参数中使用 refresh=True
。