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

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.xdnf.cn/news/19939.html

相关文章:

  • uniapp vue页面传参到webview.nvue页面的html或者另一vue中
  • 架构-亿级流量性能调优实践
  • 【ICCV 2025 顶会论文】,新突破!卷积化自注意力 ConvAttn 模块,即插即用,显著降低计算量和内存开销。
  • 阿里云轻量应用服务器部署-WooCommerce
  • 剧本杀APP系统开发:引领娱乐行业新潮流的科技力量
  • 【RNN-LSTM-GRU】第三篇 LSTM门控机制详解:告别梯度消失,让神经网络拥有长期记忆
  • 【已更新文章+代码】2025数学建模国赛A题思路代码文章高教社杯全国大学生数学建模-烟幕干扰弹的投放策略
  • 达梦数据库-字典缓冲区 (二)-v2
  • void*指针类型转换笔记
  • C++ const以及相关关键字
  • Ubuntu 25.04搭建hadoop3.4.1集群详细教程
  • Access开发导出PDF的N种姿势,你get了吗?
  • 开源本地LLM推理引擎(Cortex AI)
  • OpenTenBase vs MySQL vs Oracle,企业级应用数据库实盘对比分析
  • 使用国外网络的核心问题有哪些?
  • 基于 epoll 的高并发服务器原理与实现(对比 select 和 poll)
  • 十七、单线程 Web 服务器
  • (自用)PowerShell常用命令自查文档
  • AI重构出海营销:HeadAI如何用“滴滴模式”破解红人营销效率困局?
  • Flink 网络消息队列 PrioritizedDeque
  • C52单片机独立按键模块,中断系统,定时器计数器以及蜂鸣器
  • OpenLayers常用控件 -- 章节三:鼠标位置坐标显示控件教程
  • 多线程入门到精通系列: 从操作系统到 Java 线程模型
  • 快鹭云业财一体化系统技术解析:低代码+AI如何破解数据孤岛难题
  • 飞算JavaAI开发在线图书借阅平台全记录:从0到1的实践指南
  • 【C++】详解形参和实参:别再傻傻分不清
  • Android adb shell命令分析应用内存占用
  • 2025全国大学生数学建模C题保姆级思路模型(持续更新):NIPT 的时点选择与胎儿的异常判定
  • Trae + MCP : 一键生成专业封面——从概念到落地的全链路实战
  • java对接物联网设备(一)——使用okhttp网络工具框架对接标准API接口