本文使用 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
的写入如下图所示:
参考文章
逻辑较简单,具体写入策略挺复杂.
完。
联系我
最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。
也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
更多学习笔记见个人博客或关注微信公众号 < 呼延十 >——>呼延十