Sur*_*lvi 7 elasticsearch kibana elastic-stack elasticsearch-5
我正在尝试使用 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"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
version conflict, required seqNo [607], primary term [16]. current document has seqNo [608] and primary term [16]
Run Code Online (Sandbox Code Playgroud)
此问题的原因是什么以及如何解决此问题?我可以在这里使用任何其他查询来代替 _update_by_query 吗?请在这里帮助我
按查询更新会获取数据快照,然后更新每个匹配的文档。此错误意味着在您通过查询调用更新开始运行后,该文档已被另一个进程更新...
您可以选择忽略这些冲突问题,方法如下:
POST test/_update_by_query?conflicts=proceed
Run Code Online (Sandbox Code Playgroud)
在响应中,您将指示有多少文档存在冲突,并且您可以根据需要再次通过查询运行更新以选取它们。
更新:
如果您只需要更新单个文档并且您知道其 ID,那么您不需要使用 update by query,而只需使用update endpoint。最大的优点是更新端点有一个名为的参数,retry_on_conflict该参数将在发生冲突时重试操作,这样您就可以确保在调用返回时文档最终被更新:
POST test/_doc/123/_update?retry_on_conflict=3
{
"doc": {
"address": [{"city":"Mumbai"}]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10862 次 |
| 最近记录: |