当前位置: 首页 > 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.lryc.cn/news/617993.html

相关文章:

  • AR 智能眼镜:从入门到未来
  • MySQL 基本语法
  • 【listlist模拟】
  • Buildroot(二)
  • Python 类元编程(定制描述符的类装饰器)
  • 文旅元宇宙:科技重塑数字消费新文明
  • 【vue(一))路由】
  • 爬虫与数据分析相结合案例总结
  • Vue2篇——第二章 Vue从指令修饰符到侦听器的全面解析(重点)
  • 亚马逊广告进阶指南:如何快速打开新品的流量
  • Python笔记之`getattr`和`hasattr`用法详解
  • Docker中ES安装分词器
  • 【11-计算机视觉介绍】
  • 【代码随想录day 17】 力扣 654.最大二叉树
  • LeetCode151~188题解
  • Apache RocketMQ:消息可靠性、顺序性与幂等处理的全面实践
  • Docker 详解(保姆级安装+配置+使用教程)
  • MySQL高可用改造之数据库开发规范(大事务与数据一致性篇)
  • C++方向知识汇总(三)
  • Git 常用命令总结
  • 泰国文字识别技术:从精准识别字符向深度理解语义的方向不断进化
  • 日本VPS内存溢出了如何优化
  • 数据变而界面僵:Vue/React/Angular渲染失效解析与修复指南
  • 稠密检索:基于神经嵌入的高效语义搜索范式
  • 【LeetCode 热题 100】(七)链表
  • 数据结构——树(02构造二叉树,代码练习)
  • 【网络基础】深入理解 TCP/IP 协议体系
  • 无人机航拍数据集|第11期 无人机人员行为目标检测YOLO数据集1868张yolov11/yolov8/yolov5可训练
  • libwebsockets 服务端获取过代理的真实连接IP
  • [4.2-1] NCCL新版本的register如何实现的?