lucene - 如果在 Lucene 8.6.1 中未操作索引,docids 是否不变?
问题描述
假设我每天同时更新一次索引。在两次更新之间(大约 21 小时),docid 会保持不变吗?
解决方案
正如@andrewjames 提到的,docId 仅在合并发生时发生变化。docsId 基本上是文档在特定段中的数组索引位置。
这样做的副作用也是,如果您有多个段,那么给定的 docId 可能会分配给多个文档,一个在一个段中,一个在另一个段中,等等。如果这是一个问题,您可以在您完成后进行强制合并已完成构建索引,因此只有一个段。那么此时没有两个文档将具有相同的 docId。
如果没有发生合并,则给定文档的 docId 不会更改。除非您调用强制合并或添加或删除文档,或者升级您的索引,否则不会发生合并。
所以...如果您构建索引,并且不添加文档、删除文档或调用强制合并或升级您的索引,那么 docIds 将是稳定的。但是下一次构建索引时,给定文档可能会收到完全不同的文档 ID。正如@andrewjames 所说,docId 分配和分配时间是 Lucene 的内部事务,因此即使您知道它们当前何时以及如何分配,您也应该谨慎依赖它们。
推荐阅读
- css - 在 Jupyter 笔记本中更改正文的大小
- javascript - VueJS:无法读取未定义的属性“调度”
- oracle - 如何获取列数
- c++ - `std::set_intersection` 的 lambda 比较器
- javascript - JQuery.post 无法执行“postMessage”
- sql - SQL - 将一列中的值拆分为两个单独的列
- python - 未找到没有参数的“add_items”反向。尝试了 1 种模式:['add_items\\/(?P
[^/]+)\\/$'] - batch-file - 等待程序关闭以批量保存操作
- javascript - 在呈现平面列表的组件中执行操作
- c++ - 通常不应该公开子类 vector<> 但是如果只是方便的方法呢?