本文使用 Lucene 代码版本:8.7.0
前言
本文学习kdi
文件格式.
他又是经典三个文件中的存储数据的文件.
.kdd 文件整体结构
字段解释:
- LeafNodeData:一个叶子节点的所有数据
- DocIds: 这个叶子节点上的点对应的所有DocIds
- PackedValue: 这个叶子节点上的所有点的实际值
- Count: docId的数量
- DocIds: 这个叶子节点上的点对应的所有DocIds
- CommonPrefix: 所有值的公共前缀
- PackedValue: 这个叶子节点上的所有点的实际值
相关写入代码分析
除了Header及Footer等内容,其他写入都在org.apache.lucene.util.bkd.BKDWriter.build(int, int, org.apache.lucene.util.bkd.BKDRadixSelector.PathSlice, org.apache.lucene.store.IndexOutput, org.apache.lucene.util.bkd.BKDRadixSelector, byte[], byte[], int[], byte[], byte[], long[], int[])
方法中,具体逻辑很长就不贴代码了。
该方法递归调用,将BKD树最底层的叶子节点,按照从左到右的顺序逐个叶子写入磁盘.
其中对应图中DocIDs
和PackedValue
的写入如下图所示:
参考文章
逻辑较简单,具体写入策略挺复杂.
完。