本文使用 Lucene 代码版本:8.7.0
前言
本文学习kdm
文件格式.
kdm,kdi,kdd 三个文件共同存储了Lucene中Point类型的数据及索引,Point存储及搜索过程中使用BKD树
数据结构,因此这三个文件和BKD关系比较密切, 建议在阅读前了解相关的BKD树理论.
BKD树简单理论介绍
Lucene中对于BKD树的实现源码
.kdm 文件整体结构
字段解析:
- FileNumber: 域的名字
- Meta: 对应的元数据
- -1: 占位符
- indexFilePoint: 索引文件(kdi)文件的指针
- DataFilePointer: 数据文件(kdd)文件的指针
- CodecHeader: 编码头
- Dims: 数据存储的维度
- IndexDims: 数据索引的维度
- MaxPointInLeaf: 叶子中存储Point的最大数量
- bytePerDim: 每个维度的数据长度
- LeafNum: 叶子节点的数量
- minPoint: 最大的点的值
- maxPoint: 最大的点的值
- pointCount: 点的数量
- docCount: 出现的文档的数量
- IndexLength:索引的长度
- DataFilePointer: 数据文件的指针
- IndexFilePointer: 索引文件的指针
相关写入代码分析
kdm文件的写入比较集中,大部分在org.apache.lucene.util.bkd.BKDWriter.writeIndex(org.apache.lucene.store.IndexOutput, org.apache.lucene.store.IndexOutput, int, int, byte[], long)
中.
参考文章
比较简单,水一下.
完。
联系我
最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客或关注微信公众号 < 呼延十 >——>呼延十