u35_seg0 u35_seg1

是否能获得索引

文件segment_N

的文件名?

索引目录中

是否还有未处理

的索引文件?

索引文件是否

满足要求?

取出一个索引文件

初始化索引文件的

计数引用

索引文件是否为segments_N?

u42_seg0 u42_seg1
u43_seg0 u43_seg1
u44_seg0 u44_seg1
u45_seg0 u45_seg1
u46_seg0 u46_seg1
u47_seg0 u47_seg1 u47_seg2 u47_seg3 u47_seg4
u48_seg0 u48_seg1 u48_seg2 u48_seg3 u48_seg4

开始

SegmentInfos

u53_seg0 u53_seg1

是否出现异常?

处理异常

u58_seg0 u58_seg1
u59_seg0 u59_seg1

根据segments_N获取一个新的SegmentInfos

两个SegmentInfos

的generation是否相同?

根据新的SegmentInfos

获取CommitPoint

添加CommitPoint到CommitPoint集合commits中

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

u65_seg0 u65_seg1
u66_seg0 u66_seg1
u67_seg0 u67_seg1
u68_seg0 u68_seg1

另CommitPoint为当前提交点currentCommitPoint

u72_seg0 u72_seg1
u73_seg0 u73_seg1 u73_seg2 u73_seg3
u74_seg0 u74_seg1 u74_seg2 u74_seg3

是否获得StandardDirectoryReader?

执行检查点(checkPoint)工作

u77_seg0 u77_seg1

对commits集合进行排序

u79_seg0 u79_seg1
u80_seg0 u80_seg1 u80_seg2 u80_seg3

更新SegmentInfos的metaData

u82_seg0 u82_seg1

删除计数为0的索引文件

执行索引删除策略

执行检查点(checkPoint)工作

执行CommitPoint的删除工作

结束

u88_seg0 u88_seg1
u89_seg0 u89_seg1
u90_seg0 u90_seg1
u91_seg0 u91_seg1
u92_seg0 u92_seg1
u93_seg0 u93_seg1 u93_seg2 u93_seg3

u96_seg0 u96_seg1
u97_seg0 u97_seg1 u97_seg2 u97_seg3

u102_seg0 u102_seg1 u102_seg2 u102_seg3