从Lucene8.6.0开始,用于存储点数据(point value)的索引文件由原先的两个索引文件dim&&dii,改为三个索引文件kdd&kdi&kdm。由于生成kdd&kdi&kdm的过程基本上没有太大的变动,并且索引文件的数据结构中的字段也变化不大。故本文不会再详细介绍每一个字段的含义,即阅读本章前,最好先看下文章索引文件dim&&dii的数据结构,以及索引文件dim&&dii的生成过程以及索引文件dim&&dii的读取过程的系列文章,使得能理解优化的目的。当然在下文中,会结合一些issues来简单的叙述下优化的目的。
再次强调下,先阅读索引文件dim&&dii的生成过程以及索引文件dim&&dii的读取过程的系列文章,因为开始下笔写这篇文章的时候,我几乎忘光了之前写的这些东东,也就是相当于一片空白的重新复习了下这些系列文章, 发现看完后很容易的理解了(看来我的写作表达能力还阔以),哈哈😁。
索引文件的数据结构
我们先直接分别给出单个点数据域、多个点数据域的数据结构:
单个点数据域的数据结构
图1:
多个点数据域的数据结构
图2:
源码中对于这三个索引文件的简单描述:
图3:
图3中红框标注.kdm应该是.kdd文件,可惜的是直到目前最新版本的Lucene 8.6.3,这里的书写错误依旧未被修正。
- 索引文件.kdm(meta)中存储的是元数据,即描述点数据域的数据的信息,例如点数据的维度、每个维度占用的字