elasticsearch - ElasticSearch 合并操作会重置文档的 _version 号吗?
问题描述
我正在使用 ElasticSearch 6.3 版本。在一个索引中,我观察到超过 1000 个超过 1 个月的文档的 _version 号大于 1000。一个文档包含 S3 文件的元数据,例如密钥和其他信息,
文档的 _version 号也与文档对应的 S3 文件的版本号相匹配。
我的问题是:
为什么这些旧文档仍然保持相同数量的版本而不受合并段操作的影响?
我对合并段操作的理解是它还应该将 _version 字段重置为 1。对吗?
我期待着您的回答。
解决方案
首先,您需要了解 Elasticsearch 中的合并操作是什么:
从主要的Elasticsearch 文档来看,它不是很清楚,但让我补充一下,它实际上是硬删除旧的已删除文档,所以如果一个文档被多次更新,那么它的版本就会一直更新,但 Elasticsearch 只是做在更新时软删除并在段合并时清除(硬删除)它们(由于段的不可变性质)。
现在回答你的问题很容易
1.为什么这些旧文档仍然保持相同数量的版本而不受合并段操作的影响?
Ans:这些文档可能是某些大段的一部分,或者由于基础架构问题,合并 API 正在限制它们。
2.我对合并段操作的理解是它也应该将_version字段重置为1。对吗?
Ans:没有合并操作,只是将较小的段合并到大段中,并对已软删除的文档进行硬删除,根本不改变_version
字段。
推荐阅读
- java - Scala 中的 Spark UDF 用于提取相关数据
- python - 递归打印数字
- markdown - 转换为 PDF 时如何在 Pandoc Markdown 中继续列表缩进?
- java - 如何正确处理带有假动作的 2D 平铺碰撞?
- ruby-on-rails - 在 Rails 的多列索引中获取 [nil, nil]
- javascript - 缺少名称,NodeJS 中的 ReferenceError
- android - Navigation Arch 组件:为深度链接传递占位符参数
- karate - KarateDSL 无法在一个请求上保留我的身份验证令牌
- python - 让窗户永远留在后面
- java - Gradle - 带有 Java 7 的 SpringBoot