首页 > 解决方案 > 如果在 Lucene 8.6.1 中未操作索引,docids 是否不变?

问题描述

假设我每天同时更新一次索引。在两次更新之间(大约 21 小时),docid 会保持不变吗?

标签: lucene

解决方案


正如@andrewjames 提到的,docId 仅在合并发生时发生变化。docsId 基本上是文档在特定段中的数组索引位置。

这样做的副作用也是,如果您有多个段,那么给定的 docId 可能会分配给多个文档,一个在一个段中,一个在另一个段中,等等。如果这是一个问题,您可以在您完成后进行强制合并已完成构建索引,因此只有一个段。那么此时没有两个文档将具有相同的 docId。

如果没有发生合并,则给定文档的 docId 不会更改。除非您调用强制合并或添加或删除文档,或者升级您的索引,否则不会发生合并。

所以...如果您构建索引,并且不添加文档、删除文档或调用强制合并或升级您的索引,那么 docIds 将是稳定的。但是下一次构建索引时,给定文档可能会收到完全不同的文档 ID。正如@andrewjames 所说,docId 分配和分配时间是 Lucene 的内部事务,因此即使您知道它们当前何时以及如何分配,您也应该谨慎依赖它们。


推荐阅读