我正在尝试使用update\ by\查询更新文档的嵌套类型字段。我正在使用以下脚本查询:
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]
出现此问题的原因是什么?如何解决此问题?我可以在这里使用任何其他查询而不是按查询更新吗?请帮帮我
1条答案
按热度按时间u2nhd7ah1#
updatebyquery获取数据的快照,然后更新每个匹配的文档。此错误意味着在您的update by query调用开始运行后,文档已被另一个进程更新。。。
您可以选择忽略这些冲突问题,方法是:
在响应中,您将得到有多少文档发生冲突的指示,如果需要,您可以再次运行updatebyquery来提取它们。
更新:
如果您只需要更新一个文档,并且您知道它的id,那么您不需要使用updateby query,只需要使用update端点。最大的优点是update端点有一个名为
retry_on_conflict
它将在发生冲突时重试该操作,以便您可以确保在调用返回时最终更新文档: