首先有个IndexinngChain的类通过getChain拿到DocConsumer做文档在内存中的创建索引工作(最外层是DocFieldProcessor),几个接口:
1.updateDocument时实际调用的是:
consumer.processDocument(fieldInfos) => consumer.finishDocument(fieldInfos) => finishDocument(delTerm)
这里finishDocument做了一堆堆del队列和buffer的操作,还不是很明白。
2.deleteDocID仅在更新文档失败时调用
3.prepareFlush拿到FrozenBufferedDeletes,不是很明白
4.flush除了对delete的相关操作外就是准备好SegmentWriteState,调用consumer.flush,最后返回FlushedSegment, 这一步应该不会把del和cfs写入
5.sealsFlushedSegment会写入cfs文件,然后写入del文件
脉络是比较清晰的,但是要理解其中的做法,还要读一下DocumentsWriterDeleteQueue,然后是DocFieldProcessor。