如果不在 Lucene 8.6.1 中操作索引,docids 是否不变?

Are docids constant if the index is not manipulated in Lucene 8.6.1?

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

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

这样做的副作用还在于,如果您有多个段,那么给定的 docId 可能会分配给多个文档,一个在一个段中,一个在另一个段中,等等。如果这是一个问题,您可以这样做建立索引后强制合并,这样只有一个段。那么此时不会有两个文档具有相同的 docId。

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

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