u0_seg0 u0_seg1

是否能获得索引

文件segment_N

的文件名?

索引目录中

是否还有未处理

的索引文件?

索引文件是否

满足要求?

取出一个索引文件

初始化索引文件的

计数引用

索引文件是否为segments_N?

u7_seg0 u7_seg1
u8_seg0 u8_seg1
u9_seg0 u9_seg1
u10_seg0 u10_seg1
u11_seg0 u11_seg1
u12_seg0 u12_seg1 u12_seg2 u12_seg3 u12_seg4
u13_seg0 u13_seg1 u13_seg2 u13_seg3 u13_seg4

开始

SegmentInfos

u18_seg0 u18_seg1

是否出现异常?

处理异常

u23_seg0 u23_seg1
u24_seg0 u24_seg1

根据segments_N获取一个新的SegmentInfos

两个SegmentInfos

的generation是否相同?

根据新的SegmentInfos

获取CommitPoint

添加CommitPoint到CommitPoint集合commits中

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

u30_seg0 u30_seg1
u31_seg0 u31_seg1
u32_seg0 u32_seg1
u33_seg0 u33_seg1

另CommitPoint为当前提交点currentCommitPoint

u37_seg0 u37_seg1
u38_seg0 u38_seg1 u38_seg2 u38_seg3
u39_seg0 u39_seg1 u39_seg2 u39_seg3

是否获得StandardDirectoryReader?

执行检查点(checkPoint)工作

u42_seg0 u42_seg1

对commits集合进行排序

u44_seg0 u44_seg1
u45_seg0 u45_seg1 u45_seg2 u45_seg3

更新SegmentInfos的metaData

u47_seg0 u47_seg1

删除计数为0的索引文件

执行索引删除策略

执行检查点(checkPoint)工作

执行CommitPoint的删除工作

结束

u53_seg0 u53_seg1
u54_seg0 u54_seg1
u55_seg0 u55_seg1
u56_seg0 u56_seg1
u57_seg0 u57_seg1
u58_seg0 u58_seg1 u58_seg2 u58_seg3

u61_seg0 u61_seg1
u62_seg0 u62_seg1 u62_seg2 u62_seg3

u67_seg0 u67_seg1 u67_seg2 u67_seg3

IndexFileDeleter的构造函数流程图