开始

开始

方法二

DirectoryReader.open(final Directory directory)

方法一

DirectoryReader.open(final IndexCommit indexCommit)

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

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

files是否跟files2相等?

u213_seg0 u213_seg1
u214_seg0 u214_seg1

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

u217_seg0 u217_seg1

获得所有段的信息集合

SegmentInfos

u219_seg0 u219_seg1

获得StandardDirectoryReader

u222_seg0 u222_seg1 u222_seg2 u222_seg3

开始

方法三

DirectoryReader.open(final IndexWriter indexWriter)

开始

方法四

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

执行获得reader前的工作

收集所有达到flush条件的DWPT

执行DWPT的doFlush()

u230_seg0 u230_seg1
u231_seg0 u231_seg1

synchronized(fullFlushLock)开始

更新删除信息

u234_seg0 u234_seg1

强制发布生成的段

IndexWriter处理事件

更新ReaderPool

u238_seg0 u238_seg1
u239_seg0 u239_seg1
u240_seg0 u240_seg1

尝试段合并

u242_seg0 u242_seg1 u242_seg2 u242_seg3
u243_seg0 u243_seg1 u243_seg2 u243_seg3
u244_seg0 u244_seg1 u244_seg2 u244_seg3

结束

u246_seg0 u246_seg1 u246_seg2 u246_seg3

方法一&&方法二

执行flush后的工作

u249_seg0 u249_seg1 u249_seg2 u249_seg3

方法三&&方法四

执行获得reader后的工作

synchronized(fullFlushLock)结束

u253_seg0 u253_seg1
u254_seg0 u254_seg1
u255_seg0 u255_seg1 u255_seg2

indexCommit

是否为空?

u257_seg0 u257_seg1
u258_seg0 u258_seg1 u258_seg2 u258_seg3 u258_seg4
u259_seg0 u259_seg1 u259_seg2 u259_seg3
u260_seg0 u260_seg1 u260_seg2 u260_seg3

u262_seg0 u262_seg1 u262_seg2 u262_seg3 u262_seg4

获得所有段的信息集合

SegmentInfos

根据IndexWriter获取新的

StandardDirectoryReader

u266_seg0 u266_seg1 u266_seg2 u266_seg3 u266_seg4 u266_seg5 u266_seg6
u267_seg0 u267_seg1 u267_seg2 u267_seg3 u267_seg4 u267_seg5 u267_seg6 u267_seg7

获取StandardDirectoryReader对象的流程图