【lucene】文档id docid

删除后文档id 还会被复用吗?不会。

在 Lucene 里,docID 是一次性、不可复用的。

  • 同一个段(segment)内,docID 从 0 开始连续递增;一旦分配给某篇文档,就终身绑定,即使该文档随后被删除,这个号码也永远空出来,不会再次分配给新文档。

  • 当段合并(merge)产生新的段时,旧段被丢弃,新段的 docID 会重新从 0 开始连续编号,但这属于"新生成"的号码空间,与旧段已删除的 docID 没有继承关系。

  • 因此,对于外部调用者而言,docID 在单个 IndexReader/IndexSearcher 生命周期内始终保持稳定且唯一;删除造成的空洞不会被回填。

一句话:

删除只是把 docID 标记为"无效",但该号码不会被后续新文档复用。

也就是是在一个segment段内,docid是一次性的?

是的------在同一个 segment 内部,docID 是一次性的。

  • 每个文档追加进来时,分配一个只增不减的整数 docID(从 0 开始)。

  • 删除只是把对应 bit 在 `liveDocs` 里置 0;这个 docID 永远不会再被该 segment 里的新文档复用。

  • 当 segment 合并后,新 segment 会重新生成全新的、连续的 docID 序列,但原 segment 的 docID 已随旧 segment 一起被丢弃,因此仍不存在复用。

合并后 文档id仍旧是从0开始分配吧?

对,合并后生成的新 segment,其 docID 会重新从 0 开始连续分配。

合并过程会把参与合并的所有旧 segment 里"仍然存活"的文档再写一遍,按写入顺序重新编号:0、1、2... 。旧 segment 及其 docID 随后会被物理删除,因此新 segment 的 docID 与旧 segment 毫不相干,自然也不会保留任何"空洞"。

相关推荐
risc1234567 小时前
【lucene】advanceshallow就是遍历跳表的,可以看作是跳表的遍历器
lucene
cyh男7 小时前
Lucene 8.7.0 版本的索引文件格式
搜索引擎·全文检索·lucene
risc1234561 天前
【lucene核心】impacts的由来
lucene
在未来等你2 天前
Elasticsearch面试精讲 Day 5:倒排索引原理与实现
elasticsearch·搜索引擎·面试·全文检索·lucene·分词·倒排索引
risc1234563 天前
【lucene】 中的impactsenum与impactsdisi有啥区别?
lucene
risc1234563 天前
【lucene】如何评测一款分析器Analyzer
lucene
playStudy6 天前
从0到1玩转 Google SEO
python·搜索引擎·github·全文检索·中文分词·solr·lucene
与火星的孩子对话16 天前
Unity高级开发:反射原理深入解析与实践指南 C#
java·unity·c#·游戏引擎·lucene·反射
risc12345623 天前
【lucene】lucene索引文件的读取器都是单向的只能向前不能后退读
lucene