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

Lucene 8.7.0 版本的索引文件格式

Lucene 8.7.0 版本的索引文件格式非常丰富,每种文件都有特定的作用。以下是主要的文件格式及其功能:

核心索引文件

1. 段信息文件

.si  (Segment Info) - 段的元数据信息存储段的基本信息:文档数、使用的编解码器、版本等.cfs (Compound File) - 复合文件格式将多个索引文件合并成一个文件,减少文件句柄数.cfe (Compound File Entries) - 复合文件条目记录.cfs文件中各个逻辑文件的偏移量和长度

2. 字段相关文件

.fnm (Field Names) - 字段元数据存储字段名称、字段号、索引选项等信息.fdt (Field Data) - 存储字段值存储文档的原始字段内容(stored fields).fdx (Field Index) - 字段数据索引存储指向.fdt文件中文档位置的指针.fdm (Field Metadata) - 字段元数据8.6+版本新增,存储字段的额外元数据

3. 词项字典文件

.tim (Term Dictionary) - 词项字典存储所有词项的字典信息,按字典序排列.tip (Term Index) - 词项索引词项字典的索引,用于快速定位词项.tmd (Term Metadata) - 词项元数据存储词项的额外元数据信息

FST和.tip文件的关系

FST 是一种高效的数据结构,用于存储和检索有序字符串
.tip 是 Lucene 的一个索引文件,存储词项索引
.tip 文件内部使用 FST 来高效存储词项前缀到词项字典(.tim)的映射
FST 提供了空间效率(共享前缀)和查询效率(O(n)复杂度)

4. 倒排表文件

.doc (Frequencies) - 文档频率存储每个词项出现在哪些文档中及出现频率.pos (Positions) - 位置信息存储词项在文档中的位置信息.pay (Payloads) - 负载数据存储与位置相关的额外数据(如同义词权重)

5. 向量相关文件

.tvd (Term Vector Data) - 词向量数据存储词向量的实际数据.tvx (Term Vector Index) - 词向量索引指向.tvd文件中每个文档词向量的位置.tvm (Term Vector Metadata) - 词向量元数据存储词向量的元数据信息

6. 规范化因子文件

.nvd (Norms Data) - 规范化因子数据存储用于评分的规范化因子.nvm (Norms Metadata) - 规范化因子元数据存储规范化因子的元数据

7. 文档值文件

.dvd (DocValues Data) - 文档值数据存储列式存储的字段值,用于排序、聚合等.dvm (DocValues Metadata) - 文档值元数据存储文档值的元数据信息

8. 删除文档文件

.liv (Live Documents) - 活跃文档使用位图标记哪些文档被删除

9. 点数据文件

.dii (Points Index) - 点数据索引多维点数据的索引(用于数值范围查询).dim (Points Data) - 点数据存储实际的多维点数据

段管理文件

segments_N - 段文件列表提交点文件,记录索引中所有段的信息N是递增的版本号write.lock - 写锁文件防止多个进程同时写入索引

实际示例

// 查看索引目录中的文件
public void listIndexFiles() {Path indexPath = Paths.get("/path/to/index");try (DirectoryStream<Path> stream = Files.newDirectoryStream(indexPath)) {for (Path file : stream) {String fileName = file.getFileName().toString();System.out.println(fileName + " - " + getFileDescription(fileName));}}
}private String getFileDescription(String fileName) {if (fileName.endsWith(".si")) return "段信息";if (fileName.endsWith(".fnm")) return "字段名称";if (fileName.endsWith(".fdt")) return "存储字段数据";if (fileName.endsWith(".fdx")) return "存储字段索引";if (fileName.endsWith(".tim")) return "词项字典";if (fileName.endsWith(".tip")) return "词项索引";if (fileName.endsWith(".doc")) return "文档频率";if (fileName.endsWith(".pos")) return "位置信息";if (fileName.endsWith(".dvd")) return "文档值数据";if (fileName.endsWith(".liv")) return "删除标记";if (fileName.startsWith("segments_")) return "段列表";// ... 其他文件类型return "未知";
}

文件大小特点

// 不同类型文件的典型大小比例(仅供参考)
public class IndexFileSizes {// 存储字段文件 (.fdt, .fdx) - 通常较大,取决于存储内容// 词项字典文件 (.tim, .tip) - 中等大小// 倒排表文件 (.doc, .pos) - 较大,是索引的核心// 文档值文件 (.dvd, .dvm) - 取决于DocValues字段数量// 删除文件 (.liv) - 很小,只是位图public void analyzeIndexSize(Directory dir) throws IOException {for (String file : dir.listAll()) {long size = dir.fileLength(file);System.out.printf("%s: %.2f MB%n", file, size / (1024.0 * 1024.0));}}
}

优化建议

  1. 使用复合文件格式:减少文件数量,但可能影响性能
  2. 定期合并段:减少段数量,提高查询性能
  3. 合理配置 DocValues:根据需要启用,影响索引大小
  4. 监控文件增长:特别是 .fdt 和 .pos 文件

这些文件格式在 Lucene 8.7.0 中相对稳定,但具体实现细节可能会在不同版本间有所调整。

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

相关文章:

  • 学习资料1(粗略版)
  • android View详解—自定义ViewGroup,流式布局
  • Android 项目:画图白板APP开发(三)——笔锋(多 Path 叠加)
  • MySQL主从复制之进阶延时同步、GTID复制、半同步复制完整实验流程
  • Html重绘和重排
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】
  • 观测云产品更新 | LLM 监测、查看器、事件中心、监控等
  • void*指针类型转换笔记
  • SpringBoot中 Gzip 压缩的两种开启方式:GeoJSON 瘦身实战
  • k8s基础(未完待续)
  • 拜占庭攻击与投毒攻击
  • Linux编写shell脚本,输入多个原文件名和新文件名,一次对多个文件重命名
  • 2025亚马逊卖家防恶搞指南:揪出恶意套路,3招守住店铺安全
  • Gmail 数据泄露安全警报以及启示
  • 23种设计模式——抽象工厂模式(Abstract Factory Pattern)详解
  • C++开发中的常用设计模式:深入解析与应用场景
  • Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
  • 移远EC200A OpenCPU笔记
  • 【bash】命令查看当前目录下文件个数
  • STM32G4 速度环开环,电流环闭环 IF模式建模
  • 发票、收据合并 PDF 小程序,报销上传 3 秒搞定
  • Beautiful.ai:AI辅助PPT工具高效搞定排版,告别熬夜做汇报烦恼
  • Redis的过期策略和Redis 内存淘汰策略
  • Uni-App + Vue onLoad与onLaunch执行顺序问题完整解决方案 – 3种实用方法详解
  • 【系统架构设计(13)】项目管理上:盈亏平衡分析与进度管理
  • android seekbar显示刻度
  • 深入内核交互:用 strace 看清 Android 每一个系统调用
  • Android实战进阶 - 富文本
  • iPhone17再爆猛料?苹果2025秋季发布会亮点抢先看
  • 北斗导航 | Android Studio开发NMEA0183上位机的技术方案