开始

处理出错的文档

u5_seg0 u5_seg1

生成索引文件.nvd、.nvm

u7_seg0 u7_seg1

生成索引文件.dim、.dii

更新索引文件

.fdx、.fdt、.tvd、.tvx

u10_seg0 u10_seg1

生成索引文件

.tim、.tip、.doc、.pos、.pay

u12_seg0 u12_seg1

生成索引文件.fnm

u14_seg0 u14_seg1

处理软删除文档

u16_seg0 u16_seg1 u16_seg2 u16_seg3

清楚删除信息TermNode

u18_seg0 u18_seg1

记录所有生成的索引文件

u20_seg0 u20_seg1
u21_seg0 u21_seg1

生成FlushedSegment

是否生成

复合索引文件?

生成复合索引文件

u25_seg0 u25_seg1

生成索引文件.si

u28_seg0 u28_seg1 u28_seg2 u28_seg3 u28_seg4
u29_seg0 u29_seg1 u29_seg2 u29_seg3

生成索引文件.liv

u32_seg0 u32_seg1

结束

u34_seg0 u34_seg1
u35_seg0 u35_seg1

生成索引文件.dvd、.dvm

u37_seg0 u37_seg1
u38_seg0 u38_seg1

开始

flushQueue

是否还有DWPT

取出一个DWPT

u43_seg0 u43_seg1

synchronized开始

将DWPT中收集的索引信息

生成一个段newSegment

添加删除文件事件到eventQueue

是否生成复合文件?

u49_seg0 u49_seg1

是否发生堆积?

u52_seg0 u52_seg1
u53_seg0 u53_seg1 u53_seg2 u53_seg3 u53_seg4

添加`强制发布生成的段`的事件到eventQueue中

u56_seg0 u56_seg1

执行完doFLush后的工作

u59_seg0 u59_seg1
u60_seg0 u60_seg1 u60_seg2 u60_seg3 u60_seg4

u62_seg0 u62_seg1 u62_seg2

尝试发布生成的段

u64_seg0 u64_seg1 u64_seg2

是否处理删除信息?

u67_seg0 u67_seg1
u68_seg0 u68_seg1

添加处理删除信息事件到eventQueue

结束

u71_seg0 u71_seg1
u72_seg0 u72_seg1 u72_seg2 u72_seg3 u72_seg4

synchronized结束

主动flush

flushQueue

是否还有DWPT

或者

DWPTP中是否还有被置为flushPending的

ThreadState?

开始

自动flush

u80_seg0 u80_seg1
u81_seg0 u81_seg1

是否新增删除信息?

删除信息添加到

全局BufferedUpdates

u84_seg0 u84_seg1

全局BufferedUpdates

是否有删除信息?

u86_seg0 u86_seg1
u87_seg0 u87_seg1 u87_seg2 u87_seg3 u87_seg4

生成FrozenBufferedUpdates

并清空全局BufferedUpdates

u91_seg0 u91_seg1
u92_seg0 u92_seg1

更新DWPT的私有BufferedUpdates

u94_seg0 u94_seg1
u95_seg0 u95_seg1 u95_seg2 u95_seg3 u95_seg4

DWPT是否取自

flushQueue?

u99_seg0 u99_seg1

更新拖延状态

u101_seg0 u101_seg1
u102_seg0 u102_seg1
u103_seg0 u103_seg1 u103_seg2 u103_seg3 u103_seg4

FlushTicket添加到TicketQueue

u107_seg0 u107_seg1
u108_seg0 u108_seg1 u108_seg2 u108_seg3

开始

IndexWriter.flush()

u111_seg0 u111_seg1

执行flush前的工作

u113_seg0 u113_seg1

收集所有达到flush条件的DWPT

u115_seg0 u115_seg1

synchronized开始

执行DWPT的doFlush()

u118_seg0 u118_seg1 u118_seg2 u118_seg3

IndexWriter.flush()

u120_seg0 u120_seg1 u120_seg2 u120_seg3

开始

自动flush

u123_seg0 u123_seg1
u124_seg0 u124_seg1 u124_seg2 u124_seg3

更新删除信息

强制发布生成的段

u127_seg0 u127_seg1

IndexWriter处理事件

u129_seg0 u129_seg1

更新ReaderPool

synchronized结束

尝试段合并

u133_seg0 u133_seg1

IndexWriter处理事件

u135_seg0 u135_seg1 u135_seg2 u135_seg3

自动flush

u137_seg0 u137_seg1

结束

u139_seg0 u139_seg1

结束

u141_seg0 u141_seg1

文档提交之flush

执行DWPT的doFlush()

将DWPT中收集的索引信息

生成一个段newSegment

u145_seg0 u145_seg1
u146_seg0 u146_seg1
u147_seg0 u147_seg1

开始

生成NumDocs的信息

生成StartPoints的信息

flush阶段

结束

u154_seg0 u154_seg1
u155_seg0 u155_seg1

生成一个chunk

u157_seg0 u157_seg1
u158_seg0 u158_seg1