我在弹性搜索中更新了文档。更新后使用我通过使用他们的ID获取相同的文档。它给了我以下回复:
{
"_index": "b123456",
"_type": "documents",
"_id": "bltde56dd11ba998bab",
"_version": 3,
"found": true,
"_source": {
"title": "index.json",
"url": "/index1",
"tags": [],
"created_at": "2018-06-19T05:02:38.174Z",
"updated_at": "2018-06-19T05:07:57.155Z",
"version": 1,
"fields": [{
"uid": "fname",
"value": "john"
},
{
"uid": "lname",
"value": "test"
}
],
"class": "first"
}
}
在我使用update_by_query更新文档后,我发送以下请求到update_by_query:
{
"script": {
"source": "ctx._source.title = params.title;ctx._source.url = params.url;ctx._source.created_at = params.created_at;ctx._source.updated_at = params.updated_at;ctx._source.version = params.version;ctx._source.fields = params.fields",
"params": {
"title": "Demo title",
"url": "/demo",
"created_at": "2018-06-19T05:02:38.174Z",
"updated_at": "2018-06-19T05:07:57.155Z",
"version": 2,
"fields": [{
"uid": "fname",
"value": "vicky"
},
{
"uid": "lname",
"value": "test"
}
]
}
},
"query": {
"bool": {
"must": [{
"term": {
"_id": "bltde56dd11ba998bab"
}
},
{
"range": {
"version": {
"lt": 2
}
}
}
]
}
}
}
但它给了我状态代码:409并跟随错误:
[文件] [bltde56dd11ba998bab]:版本冲突,当前版本 [3]与提供的[2]
不同
我的文档还包含自定义版本密钥。 任何人都可以帮助我进入这个
答案 0 :(得分:0)
为了后代,我将回答这个老问题。之所以出现此问题,是因为_version
字段中ElasticSearch的内部版本值在您的初始响应中实际上是3,而不是1。
然后,您尝试将文档更新为使用外部版本值2,Elastic将其视为冲突,因为在内部,它认为版本3是最新版本,而不是版本1。您的外部版本方案与Elastic的内部版本方案不同步。
还请注意,您的update
调用中应包含以下参数,以指示该操作应遵循外部版本控制的规则,而不是Elastic的内部版本控制方案。
"version_type":external
需要通过指定此参数来进行细微但重要的区分。
在version_type设置为external的情况下,Elasticsearch将存储 版本号如给定,不会增加。另外,代替 在检查完全匹配时,Elasticsearch将仅返回一个版本 当前存储的版本大于或等于时发生冲突错误 索引命令中的一个。
有关Elastic版本的更多信息,请参见其blog post