本系列的文章会通过例子来介绍索引文件的读取,本篇文章先介绍索引文件.dim&&.dii的读取,为了便于理解,请先阅读索引文件的生成(八)之dim&&dii至索引文件的生成(十四)之dim&&dii的文章。
在生成SegmentReader期间,会生成PointsReader(PointsReader为抽象类,实现的子类就是Lucene60PointsReader对象),它用来描述某个段中的点数据信息,下面先列出该对象包含的部分信息:
- final Map<Integer,BKDReader> readers = new HashMap<>();
在上述的Map对象中,存放的是不同域名的点数据信息,key为域的编号(FieldNumber),value为域对应的点数据信息,通过读取索引文件.dii来初始化readers对象,BKDReader中包含的主要信息如下所示:
-
numDataDims:点数据的维度数量
-
maxPointsInLeafNode:每个叶子节点中的最多包含的点数据数量
-
bytesPerDim:一个维度值占用的字节数量
-
numLeaves:叶子节点的数量
-
minPackedValue:MinPackedValue中每个维度的值都是所在维度的最小值
-
maxPackedValue:MinPackedValue中每个维度的值都是所在维度的最大值
- minPackedValue跟maxPackedValue两者描述了BKD树中点数据的数值范围(见下文)
-
pointCount:当前域中的点数据的数量
-
docCount:包含当前域中的点数据域的文档数量。 一篇文档中可以包含多个相同域名的点数据域,但是docCount的计数为1
-
packedIndex:PackedIndex存放了非叶节点的信息
上述的字段在索引文件.dim中的位置如下所示:
图1:
上图中,根据索引文件.dii中的Count获得不同域名的点数据的数量,随后依次遍历每一个Field,通过下面的两个信息读取某个点数据域在索引文件.dim中的信息:
看这里:https://www.amazingkoala.com.cn/Lucene/Search/2020/0427/135.html