开始

开始

方法二

DirectoryReader.open(final Directory directory)

方法一

DirectoryReader.open(final IndexCommit indexCommit)

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

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

files是否跟files2相等?

u46_seg0 u46_seg1
u47_seg0 u47_seg1

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

u50_seg0 u50_seg1

获得所有段的信息集合

SegmentInfos

u52_seg0 u52_seg1

获得StandardDirectoryReader

u55_seg0 u55_seg1 u55_seg2 u55_seg3

开始

方法三

DirectoryReader.open(final IndexWriter indexWriter)

开始

方法四

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

执行获得reader前的工作

收集所有达到flush条件的DWPT

执行DWPT的doFlush()

u63_seg0 u63_seg1
u64_seg0 u64_seg1

synchronized(fullFlushLock)开始

更新删除信息

u67_seg0 u67_seg1

强制发布生成的段

IndexWriter处理事件

更新ReaderPool

u71_seg0 u71_seg1
u72_seg0 u72_seg1
u73_seg0 u73_seg1

尝试段合并

u75_seg0 u75_seg1 u75_seg2 u75_seg3
u76_seg0 u76_seg1 u76_seg2 u76_seg3
u77_seg0 u77_seg1 u77_seg2 u77_seg3

结束

u79_seg0 u79_seg1 u79_seg2 u79_seg3

方法一&&方法二

执行flush后的工作

u82_seg0 u82_seg1 u82_seg2 u82_seg3

方法三&&方法四

执行获得reader后的工作

synchronized(fullFlushLock)结束

u86_seg0 u86_seg1
u87_seg0 u87_seg1
u88_seg0 u88_seg1 u88_seg2

indexCommit

是否为空?

u90_seg0 u90_seg1
u91_seg0 u91_seg1 u91_seg2 u91_seg3 u91_seg4
u92_seg0 u92_seg1 u92_seg2 u92_seg3
u93_seg0 u93_seg1 u93_seg2 u93_seg3

u95_seg0 u95_seg1 u95_seg2 u95_seg3 u95_seg4