本文承接文章索引文件的读取(十四)之fdx&&fdt&&fdm,继续介绍剩余的内容。为了更好的理解下文中的内容,建议先阅读文章DirectMonotonicWriter&&Reader。下面先给出读取索引文件fdx&&fdt&&fdm的流程图。
读取索引文件fdx&&fdt&&fdm的流程图
图1:
读取一个Chunk
图2:
当图1的流程点文档号是否在BlockState
不满足条件后,需要根据文档号(段内文档号)重新找到文档号所属的chunk,大致分为四个步骤:
图3:
点击查看大图
在介绍每个步骤之前, 我们先回顾下文章索引文件的读取(十四)之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