当前位置: 首页 > news >正文

【lucene】livedocs描述

在 Lucene 里,liveDocs(通常写作 `liveDocs`) 是一个非常轻量的只读位图(`Bits`),用来快速回答“当前索引段里哪些文档还活着(即未被删除)”。  未被逻辑删除

(可能存在逻辑上已删除,但物理上还在,这种文档在livedocs认为是已经删除的)

一句话理解:  

> `liveDocs` 就是“未删除文档的身份证列表”,搜索时凡是位为 `1` 的 docID 就参与打分、返回;为 `0` 的直接跳过。

要点拆解:

1. 数据结构  

   - 类型:`org.apache.lucene.util.Bits`(位图)  

   - 长度 = 段内最大 docID + 1  

   - 每个 bit 对应一个 docID:`true` 表示存活,`false` 表示已逻辑删除。

2. 从哪来  

   - `LeafReader.getLiveDocs()` 返回。  

   - 底层由 `LiveDocsFormat` 从 `.liv` 文件读取(Lucene 8.x 默认是 `Lucene50LiveDocsFormat`)。

3. 用来干什么  

   - 搜索阶段:

     `IndexSearcher` 把 `liveDocs` 作为 `acceptDocs` 参数传给 `scoreAll`,见源码:

    

```java

     scorer.score(leafCollector, ctx.reader().getLiveDocs());

     ```

   - 合并阶段:`IndexWriter` 根据 `liveDocs` 把已删除文档真正丢弃,生成新的干净段。

4. 不存“删除文档”  

   - 它只记录“谁还活着”,并不保存删除文档的原始内容或列表。  

   - 已删除文档的数据仍在段文件里,只是被位图屏蔽,直到下次段合并才被物理清除。

因此,当你看到  

```java

Bits liveDocs = reader.getLiveDocs();

```  

就把它当成一张“快速通行证”:搜索时只让通行证上打钩的文档通过即可。

也就是说livedocs存的是所有没删除的文档?

是的,可以这么理解:

`liveDocs` 这个 `Bits` 对象覆盖了整个段的所有 docID,其中值为 `true` 的位正好对应当前仍然存活(未删除)的文档。  

换句话说,它不是“存文档”,而是用一个位图标记每个 docID 是否有效。  

- 位图长度 = 段内最大 docID + 1  

- 位为 1 → 该 docID 对应的文档未删除  

- 位为 0 → 该 docID 对应的文档已删除(逻辑删除)

所以 `liveDocs` 并不是把“没删除的文档列表”存进去,而是用“位数组”告诉我们哪些 docID 仍然可用。

http://www.dtcms.com/a/326244.html

相关文章:

  • 如何开始创业?
  • OpenBMC中phosphor-ipmi-host深度解析:架构、原理与应用实践
  • 机器学习TF-IDF算法详解
  • scikit-learn/sklearn学习|岭回归解读
  • AI 视频卫士:AI 无人机巡检,适配多元河道场景的治理利器
  • 网络基础与套接字的学习
  • canvas实现图片标注之Fabric.js从入门学习到实现labelImg矩形多边形标注工具【下】
  • 河北邢台数控滑台与机器人行走轨道的内在联系
  • 煤矿工地运煤卡车的4G远程视频监控解决方案
  • QT通过qputenv设置环境变量与使用(AI生成)
  • vue2中this.$createElement()在vue3中应该如何改造
  • 开闭原则代码示例
  • Spring Framework源码解析——BeanPostProcessor
  • 进程的理解
  • 无人机航拍数据集|第12期 无人机停车场车辆计数目标检测YOLO数据集1568张yolov11/yolov8/yolov5可训练
  • 数字图像处理4
  • Spring Framework源码解析——InitializingBean
  • 线程池ThreadPoolExecutor源码剖笔记
  • 对自己的 app 进行分析, 诊断,审视
  • pcl完成halcon3d中的下采样(按对角个数)
  • 网络资源模板--基于Android Studio 实现的手绘板App
  • DNS(域名系统)详解与 BIND 服务搭建
  • C# 异步编程(BeginInvoke和EndInvoke)
  • 【Java后端】Quartz任务调度核心机制详解:从基础编排到动态控制
  • Qwen 3 架构深度解析:混合推理、MoE创新与开源生态的全面突破
  • CSPOJ:1561: 【提高】买木头
  • 智能小e-智能办公文档
  • OCAD for Orienteering 20Crack 定向越野:工作流程
  • Chrome插件开发【Service Worker练手小项目】
  • MySQL 运算符