从本篇文章开始介绍索引文件合并的过程,其中合并策略、合并调度在之前的文章中已经介绍,没有阅读过这些文章并不会影响对本篇文章的理解。
由于本篇文章是索引文件的合并的开篇文章,故我们先给出各类索引文件合并的先后顺序,如下所示:
图1:
图1中第96行的merge( )方法在被调用后,就开始依次对各种类型的索引文件进行合并,该方法被调用的时机点如下图所示:
图2:
图2中的流程图是执行段的合并的完整流程,其介绍可以阅读系列文章执行段的合并。在红框标注的流程点执行索引文件的合并
中会调用图1中的第96行的merge( )方法,开始索引文件的合并。我们先介绍索引文件fdx&&fdt&&fdm的合并。
索引文件fdx&&fdt&&fdm的合并流程图
图3:
待合并集合
图4:
无论执行哪种索引文件的合并,其输入参数都是同一个MergeState对象,该对象中包含了不同索引文件对应的''reader''数组,数组中的某一个"reader"描述了某个段的索引文件信息,如下图所示:
图5:
所以对于索引文件fdx&&fdt&&fdm的合并,会使用到图3中的StoredFieldsReader[ ]数组,它即是图5中的待合并集合。
看这里:https://www.amazingkoala.com.cn/Lucene/Index/2020/1130/180.html