Lucene 索引文件的读取(十五)之fdx&&fdt&&fdm

本文承接文章索引文件的读取(十四)之fdx&&fdt&&fdm,继续介绍剩余的内容。为了更好的理解下文中的内容,建议先阅读文章DirectMonotonicWriter&&Reader。下面先给出读取索引文件fdx&&fdt&&fdm的流程图。

读取索引文件fdx&&fdt&&fdm的流程图

图1:

Lucene 索引文件的读取(十五)之fdx&&fdt&&fdm

读取一个Chunk

图2:

Lucene 索引文件的读取(十五)之fdx&&fdt&&fdm

  当图1的流程点文档号是否在BlockState不满足条件后,需要根据文档号(段内文档号)重新找到文档号所属的chunk,大致分为四个步骤:

图3:

Lucene 索引文件的读取(十五)之fdx&&fdt&&fdm

点击查看大图

  在介绍每个步骤之前, 我们先回顾下文章索引文件的读取(十四)之fdx&&fdt&&fdm中很重要的内容,即索引文件.fdm中的信息在生成reader阶段就已经被全量读取到内存的,而索引文件.fdx的NumDocBlock字段以及StartPointBlock字段则是off-heap方式读取。

步骤一

  执行步骤一的目的是找出一个index,该index描述的是第index个chunk,因为在文章索引文件的生成(二十四)之fdx&&fdt&&fdm我们说到,在flush阶段,每1024(2<< BlockShitf)个chunk就会生成一个NumDocsMeta,所以通过索引文件.fdm的TotalChunks得到chunk的数量以及二分法,随后通过下面的代码一判断出属于哪一个NumDocMeta,随后通过代码二判断出NumDocMeta这个block中的块内索引blockIndex

 

看这里:https://www.amazingkoala.com.cn/Lucene/Search/2020/1113/177.html