【发布时间】:2019-01-19 21:17:54
【问题描述】:
我们有以下场景:
- Elastic Search 基于 Lucene 构建。
- 1400 万份文档的索引基线(批量索引)
- 每周大约有 2 万个文档被删除,还有大约 3 万个文档被重新索引或更新。通过 Bulk-API 对 2000 个文档批量进行索引。
首先我们处理文档的删除,然后出现更新。 仅供参考,我们可能会删除一个文档,该文档将在几分钟内被更新程序再次索引。
我现在的问题: 如果 ES 将文档 (ID:D123) 标记为在段中删除(比如说 A),但之后具有相同 ID (ID:D123) 的文档被索引到另一个段 (B) 中,则该文档应该是可搜索的。但是,如果发生段合并会发生什么?
段 B 将被合并到段 A 中,其中包含相同文档 ID (ID:D123) 的删除标志。
合并后,文档是否还有删除标志? 我知道,如果一个段被合并,则删除的文档不会被合并。但是,合并发生的方式是否重要? 将 A 分段为 B 或将 B 分段为 A?
在这种情况下,我们丢失了一些文档,但仍然无法找出原因。
对于短期解决方案,我过滤掉重新索引后要删除的文档。
我想了解整个过程。 好像完全不一致!
谢谢
【问题讨论】:
标签: elasticsearch merge lucene segment