开始

开始

方法二

DirectoryReader.open(final Directory directory)

方法一

DirectoryReader.open(final IndexCommit indexCommit)

获得索引目录中的所有文件集合files

获得索引目录中的所有文件集合files2

files是否跟files2相等?

u7_seg0 u7_seg1
u8_seg0 u8_seg1

获取索引目录最后一次提交的segment_N的文件名

u11_seg0 u11_seg1

获得所有段的信息集合

SegmentInfos

u13_seg0 u13_seg1

获得StandardDirectoryReader

u16_seg0 u16_seg1 u16_seg2 u16_seg3

开始

方法三

DirectoryReader.open(final IndexWriter indexWriter)

开始

方法四

DirectoryReader.open(final IndexWriter indexWriter, boolean applyAllDeletes, boolean writeAllDeletes)

执行获得reader前的工作

收集所有达到flush条件的DWPT

执行DWPT的doFlush()

u24_seg0 u24_seg1
u25_seg0 u25_seg1

synchronized(fullFlushLock)开始

更新删除信息

u28_seg0 u28_seg1

强制发布生成的段

IndexWriter处理事件

更新ReaderPool

u32_seg0 u32_seg1
u33_seg0 u33_seg1
u34_seg0 u34_seg1

尝试段合并

u36_seg0 u36_seg1 u36_seg2 u36_seg3
u37_seg0 u37_seg1 u37_seg2 u37_seg3
u38_seg0 u38_seg1 u38_seg2 u38_seg3

结束

u40_seg0 u40_seg1 u40_seg2 u40_seg3

方法一&&方法二

执行flush后的工作

u43_seg0 u43_seg1 u43_seg2 u43_seg3

方法三&&方法四

执行获得reader后的工作

synchronized(fullFlushLock)结束

u47_seg0 u47_seg1
u48_seg0 u48_seg1
u49_seg0 u49_seg1 u49_seg2

indexCommit

是否为空?

u51_seg0 u51_seg1
u52_seg0 u52_seg1 u52_seg2 u52_seg3 u52_seg4
u53_seg0 u53_seg1 u53_seg2 u53_seg3
u54_seg0 u54_seg1 u54_seg2 u54_seg3

u56_seg0 u56_seg1 u56_seg2 u56_seg3 u56_seg4