u163_seg0 u163_seg1

是否能获得索引

文件segment_N

的文件名?

索引目录中

是否还有未处理

的索引文件?

索引文件是否

满足要求?

取出一个索引文件

初始化索引文件的

计数引用

索引文件是否为segments_N?

u170_seg0 u170_seg1
u171_seg0 u171_seg1
u172_seg0 u172_seg1
u173_seg0 u173_seg1
u174_seg0 u174_seg1
u175_seg0 u175_seg1 u175_seg2 u175_seg3 u175_seg4
u176_seg0 u176_seg1 u176_seg2 u176_seg3 u176_seg4

开始

SegmentInfos

u181_seg0 u181_seg1

是否出现异常?

处理异常

u186_seg0 u186_seg1
u187_seg0 u187_seg1

根据segments_N获取一个新的SegmentInfos

两个SegmentInfos

的generation是否相同?

根据新的SegmentInfos

获取CommitPoint

添加CommitPoint到CommitPoint集合commits中

增加新的SegmentInfos对应的索引文件的计数

u193_seg0 u193_seg1
u194_seg0 u194_seg1
u195_seg0 u195_seg1
u196_seg0 u196_seg1

另CommitPoint为当前提交点currentCommitPoint

u200_seg0 u200_seg1
u201_seg0 u201_seg1 u201_seg2 u201_seg3
u202_seg0 u202_seg1 u202_seg2 u202_seg3

是否获得StandardDirectoryReader?

执行检查点(checkPoint)工作

u205_seg0 u205_seg1

对commits集合进行排序

u207_seg0 u207_seg1
u208_seg0 u208_seg1 u208_seg2 u208_seg3

更新SegmentInfos的metaData

u210_seg0 u210_seg1

删除计数为0的索引文件

执行索引删除策略

执行检查点(checkPoint)工作

执行CommitPoint的删除工作

结束

u216_seg0 u216_seg1
u217_seg0 u217_seg1
u218_seg0 u218_seg1
u219_seg0 u219_seg1
u220_seg0 u220_seg1
u221_seg0 u221_seg1 u221_seg2 u221_seg3

u224_seg0 u224_seg1
u225_seg0 u225_seg1 u225_seg2 u225_seg3

u230_seg0 u230_seg1 u230_seg2 u230_seg3