3

Lucene系列(20)索引格式之kdd文件

 3 years ago
source link: http://huyan.couplecoders.tech/lucene/%E6%90%9C%E7%B4%A2%EF%BC%8C%E7%B4%A2%E5%BC%95%E6%96%87%E4%BB%B6/2021/04/04/lucene%E7%B3%BB%E5%88%97(20)%E7%B4%A2%E5%BC%95%E6%A0%BC%E5%BC%8F%E4%B9%8Bkdd%E6%96%87%E4%BB%B6/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文使用 Lucene 代码版本:8.7.0

本文学习kdi文件格式.

他又是经典三个文件中的存储数据的文件.

.kdd 文件整体结构

2021-04-13-13-01-31

字段解释:

  • 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树最底层的叶子节点,按照从左到右的顺序逐个叶子写入磁盘.

其中对应图中DocIDsPackedValue的写入如下图所示:

2021-04-13-13-07-44

逻辑较简单,具体写入策略挺复杂.

最后,欢迎关注我的个人公众号【 呼延十 】,会不定期更新很多后端工程师的学习笔记。 也欢迎直接公众号私信或者邮箱联系我,一定知无不言,言无不尽。 %E6%89%AB%E7%A0%81_%E6%90%9C%E7%B4%A2%E8%81%94%E5%90%88%E4%BC%A0%E6%92%AD%E6%A0%B7%E5%BC%8F-%E6%A0%87%E5%87%86%E8%89%B2%E7%89%88.png

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:[email protected]

更多学习笔记见个人博客或关注微信公众号 < 呼延十 >——>呼延十




About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK