开始
开始
方法二
DirectoryReader.open(final Directory directory)
方法一
DirectoryReader.open(final IndexCommit indexCommit)
获得索引目录中的所有文件集合files
获得索引目录中的所有文件集合files2
files是否跟files2相等?
否
获取索引目录最后一次提交的segment_N的文件名
获得所有段的信息集合
SegmentInfos
是
获得StandardDirectoryReader
开始
方法三
DirectoryReader.open(final IndexWriter indexWriter)
开始
方法四
DirectoryReader.open(final IndexWriter indexWriter, boolean applyAllDeletes, boolean writeAllDeletes)
执行获得reader前的工作
收集所有达到flush条件的DWPT
执行DWPT的doFlush()
synchronized(fullFlushLock)开始
更新删除信息
强制发布生成的段
IndexWriter处理事件
更新ReaderPool
尝试段合并
结束
方法一&&方法二
执行flush后的工作
方法三&&方法四
执行获得reader后的工作
synchronized(fullFlushLock)结束
indexCommit
是否为空?
是
否
获得所有段的信息集合
SegmentInfos
根据IndexWriter获取新的
StandardDirectoryReader
获取StandardDirectoryReader对象的流程图