开始

是否还有

未处理的段?

生成查询条件BooleanQuery

结束

段中是否有

删除信息?

获取满足查询的文档号集合

文档号添加到liveDocs

u282_seg0 u282_seg1
u283_seg0 u283_seg1 u283_seg2
u284_seg0 u284_seg1 u284_seg2
u285_seg0 u285_seg1
u286_seg0 u286_seg1
u287_seg0 u287_seg1
u288_seg0 u288_seg1
u289_seg0 u289_seg1 u289_seg2 u289_seg3

开始

待合并的段集合

OneMerge

作用(apply)删除信息

DocValues信息

写入到磁盘

初始化一个新段

更新待合并的段集合

OneMerge

获取SegmentReader

的集合MergeReader

生成SegmentMerger

执行索引文件的合并

设置新段包含的

索引文件名

生成复合索引文件

新段对应的索引文件.si写入磁盘

生成IndexReaderWarmer

提交合并

调用钩子函数

完成合并后的工作

更新pendingMerges

结束

u312_seg0 u312_seg1
u313_seg0 u313_seg1
u314_seg0 u314_seg1
u315_seg0 u315_seg1
u316_seg0 u316_seg1 u316_seg2 u316_seg3 u316_seg4 u316_seg5
u317_seg0 u317_seg1
u318_seg0 u318_seg1
u319_seg0 u319_seg1
u320_seg0 u320_seg1
u321_seg0 u321_seg1

synchronized(IndexWriter)开始

synchronized(IndexWriter)结束

synchronized(IndexWriter)开始

synchronized(IndexWriter)结束

u326_seg0 u326_seg1 u326_seg2 u326_seg3
u327_seg0 u327_seg1
u328_seg0 u328_seg1
u329_seg0 u329_seg1
u330_seg0 u330_seg1
u331_seg0 u331_seg1
u332_seg0 u332_seg1 u332_seg2 u332_seg3

synchronized

(IndexWriter)结束

synchronized

(IndexWriter)开始

段的合并的流程图

u336_seg0