【lucene】SegmentInfos

SegmentInfos 类中文说明  
————————————  

**一句话**  
`SegmentInfos` 是 `segments_N` 文件的**内存表示**。它把磁盘上的 `segments_N` 读进来,变成一堆 `SegmentInfo` 的集合;当你增删改索引、合并段、提交时,再把它写回磁盘,生成新的 `segments_N`。
一个 segments_N 文件里保存了多个段(segment)的信息列表,每条记录包含段名、编解码器、删除代际等字段。

索引中当前活跃的段被保存在段信息文件 segments_N 中。索引目录里可能同时存在一个或多个 segments_N 文件;然而,只有代际号最大的那个才是活跃文件(当存在更旧的 segments_N 文件时,是因为它们暂时无法被删除,或正在使用自定义的 IndexDeletionPolicy)。该文件按名称列出每个段,并包含有关编解码器及删除代际的详细信息。

---

### 文件格式速览  
文件名:`segments_N`(N 是递增的 long 值)  
目录里可能有多个 `segments_N`,但**数字最大的那个是“当前活跃”的**。旧文件之所以还在,要么暂时删不掉,要么用了自定义 `IndexDeletionPolicy`。

#### 文件结构(按出现顺序)
| 字段 | 类型 | 说明 |
|---|---|---|
| Header | `IndexHeader` | 魔数、codec 名、版本 |
| LuceneVersion | 3 个 vInt | 写这次 commit 时用的 Lucene 主/次/补丁版本 |
| MinSegmentLuceneVersion | 3 个 vInt | **最老一段**的 Lucene 版本(≥1 段时才写) |
| NameCounter | int32 | 用来给**新段命名**的自增计数器(_0、_1…) |
| SegCount | int32 | 当前共有多少个段 |
| **循环 SegCount 次** |  |  |
| ‑ SegName | String | 段前缀名,如 _2 |
| ‑ SegID | byte[ID_LENGTH] | 该段 Codec 的唯一 id |
| ‑ SegCodec | String | 编码该段用的 Codec 名字 |
| ‑ DelGen | int64 | 删除文件的代际号;-1=无删除,>0=有删除 |
| ‑ DeletionCount | int32 | 该段内被删除的文档数 |
| ‑ FieldInfosGen | int64 | fieldInfos 更新代际号;-1=无更新 |
| ‑ DocValuesGen | int64 | DocValues 更新代际号;-1=无更新 |
| ‑ UpdatesFiles | Map<int32, Set<String>> | 每个字段对应的更新文件集合 |
| **循环结束** |  |  |
| CommitUserData | Map<String,String> | 用户自定义 KV,可通过 `IndexWriter.setLiveCommitData` 设置 |
| Footer | `CodecFooter` | 校验和、尾部魔数 |

---

### 字段速查  

Version 记录通过添加或删除文档导致索引被修改的次数。
NameCounter 用于为新段文件生成名称。
SegName 是段的名称,用作构成该段索引的所有文件的文件名前缀。
DelGen 是删除文件的代际号。若为 -1,表示无删除;大于零表示存在由 LiveDocsFormat 存储的删除。
DeletionCount 记录该段中被删除的文档数。
SegCodec 是编码该段所用的编解码器名称。
SegID 是编码该段所用的编解码器标识符。
CommitUserData 存储可选的用户提供的透明 Map<String,String>,该 Map 通过 IndexWriter.setLiveCommitData(Iterable) 传入。
FieldInfosGen 是 fieldInfos 文件的代际号。若为 -1,表示该段无 fieldInfos 更新;大于零表示存在由 FieldInfosFormat 存储的 fieldInfos 更新。
DocValuesGen 是可更新 DocValues 的代际号。若为 -1,表示该段无 DocValues 更新;大于零表示存在由 DocValuesFormat 存储的 DocValues 更新。
UpdatesFiles 按字段存储在该段中被更新的文件集合。
- **Version**  
每次增删文档都会自增,用来判断“索引是否发生变化”。

- **NameCounter**  
保证新段文件名全局唯一。

- **SegName**  
段文件前缀:_0.cfe、_0.cfs、_0.tim… 都靠它。

- **DelGen / DeletionCount**  
配合 `LiveDocsFormat` 实现“软删除”或“硬删除”。

- **CommitUserData**  
可存放业务标记(如时间戳、版本号),用于备份或审计。

- **FieldInfosGen / DocValuesGen**  
支持“在线”更新字段属性或 DocValues,无需重新建索引。

---

### 使用场景  
- 启动时:`SegmentInfos.readLatestCommit(dir)` → 拿到当前所有段。  
- 提交时:`IndexWriter.commit()` → 更新 `SegmentInfos` 并写回磁盘生成新的 `segments_N`。  
- 合并时:`MergePolicy` 修改 `SegmentInfos.segments` → 旧段被移除,新段加入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96026.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Read Frog:一款开源AI浏览器语言学习扩展

Read Frog&#xff1a;一款开源AI浏览器语言学习扩展 来源&#xff1a;Poixe AI Read Frog&#xff08;中文名&#xff1a;陪读蛙&#xff09;是一款开源的浏览器扩展&#xff0c;旨在通过人工智能技术&#xff0c;将常规网页浏览转化为一种沉浸式的语言学习体验。该工具通过…

天地图应用篇:增加全屏、图层选择功能

天地图应用篇&#xff1a;增加全屏、图层选择功能本节说明&#xff1a; 目的&#xff1a; 实现地图的图层切换全屏显示 / 退出全屏案例截图 示下&#xff1a;案例代码示例代码&#xff1a; <template><div class"tianditu-map-container"><!-- 顶部搜…

从零开始,系统学习AI与机器学习:一份真诚的学习路线图

人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;正在深刻改变众多行业的面貌&#xff0c;掌握这些技术已成为许多技术从业者提升竞争力的重要路径。无论你是希望进入这个充满潜力的领域&#xff0c;还是期望在现有技术基础上进行拓展&#xff0c;一份…

NVIDIA CWE 2025 上海直击:从 GPU 集群到 NeMo 2.0,企业 AI 智能化的加速引擎

前言 8 月 8 日&#xff0c;我受邀参加了在上海举办的 NVIDIA CWE 大会。作为一个正在企业内部推动 AI 落地的从业者&#xff0c;这场会议对我来说不仅是“充电”&#xff0c;更像是一场“解题会”。参会感受 在分享干货之前&#xff0c;我先谈谈这次参会的不同感受。给我感受特…

Web攻防-大模型应用LLM安全提示词注入不安全输出代码注入直接间接数据投毒

知识点&#xff1a; 1、WEB攻防-LLM安全-API接口安全&代码注入 2、WEB攻防-LLM安全-提示词注入&不安全输出 Web LLM&#xff08;Large Language Model&#xff09;攻击指针对部署在Web端的AI大语言模型的攻击行为。攻击者通过恶意提示词注入、训练数据窃取、模型逆向工…

docker compose再阿里云上无法使用的问题

最原始的Dokcerfile # 使用官方Python 3.6.8镜像 FROM python:3.6.8-slimWORKDIR /app# 复制依赖文件 COPY requirements.txt .RUN pip install --upgrade pip # 检查并安装依赖&#xff08;自动处理未安装的包&#xff09; RUN pip install --no-cache-dir -r requirements.tx…

C++STL容器List的模拟实现

一、引言list的实现&#xff0c;还是比较简单的&#xff0c;大家只要想着土家楼的形状&#xff0c;画出图来就好了&#xff0c;不需要过多担心。本次的博客会发出一个完整的实现List的List.hpp&#xff0c;以后也会这样&#xff0c;主要是分段发被说孩子分段生。二、模拟List由…

区块链 + 域名Web3时代域名投资的新风口(上)

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

电子电气架构 --- 软件会给汽车带来哪些变化?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

在rtthread中,互斥量不能在中断服务例程中使用?以及线程多次持有互斥量的情况怎么理解?

互斥锁的所有权&#xff1a;互斥量的状态只有两种&#xff0c;开锁或闭锁&#xff08;两种状态值&#xff09;。当有线程持有它时&#xff0c;互斥量处于闭锁状态&#xff0c;由这个线程获得它的所有权。相反&#xff0c;当这个线程释放它时&#xff0c;将对互斥量进行开锁&…

力扣32:最长有效括号

力扣32:最长有效括号题目思路代码题目 给你一个只包含 ‘(’ 和 ‘)’ 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 左右括号匹配&#xff0c;即每个左括号都有对应的右括号将其闭合的字符串是格式正确的&#xff0c;比如 “…

机器学习实例应用

K最近邻算法K近邻算法(KNN,k-Nearest Neighbor),每个样本都可以用它的最接近的K个邻近值来代表。算法说明&#xff1a;①输入没有标签的新数据&#xff0c;将新数据的每个特征与样本集中数据对应的特征进行比较&#xff0c;然后算法提取样本集中特征最相似数据&#xff08;最近…

力扣 hot100 Day77

连做了几个动态规划的中等题&#xff0c;还是比较有套路的&#xff0c;这里只简要分析一下最长递增子序列&#xff0c;设定dp[i]为以nums[i]结尾的最长子序列&#xff0c;递推公式就好推了乘积最大子数组&#xff0c;和上面类似&#xff0c;但考虑到负负得正&#xff0c;所以需…

深入解析RabbitMQ与AMQP-CPP:从原理到实战应用

一、RabbitMQ安装 1.安装 RabbitMQ sudo apt install rabbitmq-serverRabbitMQ 的简单使用 # 启动服务 sudo systemctl start rabbitmq-server.service # 查看服务状态 sudo systemctl status rabbitmq-server.service # 安装完成的时候默认有个用户 guest &#xff0c;但是权限…

(论文速读)ViDAR:视觉自动驾驶预训练框架

论文题目&#xff1a;Visual Point Cloud Forecasting enables Scalable Autonomous Driving&#xff08;视觉点云预测实现可扩展的自动驾驶&#xff09; 会议&#xff1a;CVPR2024 摘要&#xff1a;与对通用视觉的广泛研究相比&#xff0c;可扩展视觉自动驾驶的预训练很少被探…

《Unity Shader入门精要》学习笔记二

1、基础光照&#xff08;1&#xff09;看世界的光模拟真实的光照环境来生成一张图像&#xff0c;需要考虑3种物理现象。光线从光源中被发射出来。光线和场景中的一些物体相交&#xff1a;一些光线被物体吸收了&#xff0c;而另一些光线被散射到其他方向摄像机吸收了一些光&…

Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理

一、Enumerated Type Customization Utility 枚举类型自定义实用程序,可用于添加或编辑枚举类型的值,在Windchill 12.0+中可直接在类型和属性管理中编辑,如下图所示,而在Windchill 11.0中只能通过windchill shell启动程序,下面将详细介绍Windchill 11.0中启动并使用枚举类…

UGUI源码剖析(10):总结——基于源码分析的UGUI设计原则与性能优化策略

UGUI源码剖析&#xff08;第十章&#xff09;&#xff1a;总结——基于源码分析的UGUI设计原则与性能优化策略 本系列文章对UGUI的核心组件与系统进行了深入的源代码级分析。本章旨在对前述内容进行系统性总结&#xff0c;提炼出UGUI框架最核心的设计原则&#xff0c;并基于这些…

STM32N6引入NPU,为边缘AI插上“隐形的翅膀”

2025年的春天格外特别。伴随着人形机器人、DeepSeek的强势刷屏&#xff0c;AI成了最有前景的赛道。万物皆可AI&#xff0c;万物也在寻觅用上AI或者让AI“转正”的“aha moment”。 帮助机器更好地“思考”&#xff0c;让更多的AI走向边缘&#xff0c;是AI发展的重要趋势之一。…

演练:使用VB开发多智能体协作的荣格八维分析器

在大语言模型高速发展的时代&#xff0c;我们面对困难的语义分析任务&#xff0c;通过构建智能体进行处理是一个流行趋势。本文将介绍如何使用 Visual Basic .NET 开发一个多智能体协作系统&#xff0c;用于分析聊天记录中特定人物的荣格八维人格类型。 本文使用 CC-BY-NC-SA …