/*
This is the current indexing chain:
DocConsumer / DocConsumerPerThread
--> code: DocFieldProcessor
--> DocFieldConsumer / DocFieldConsumerPerField
--> code: DocFieldConsumers / DocFieldConsumersPerField
--> code: DocInverter / DocInverterPerField
--> InvertedDocConsumer / InvertedDocConsumerPerField
--> code: TermsHash / TermsHashPerField
--> TermsHashConsumer / TermsHashConsumerPerField
--> code: FreqProxTermsWriter / FreqProxTermsWriterPerField
--> code: TermVectorsTermsWriter / TermVectorsTermsWriterPerField
--> InvertedDocEndConsumer / InvertedDocConsumerPerField
--> code: NormsConsumer / NormsConsumerPerField
--> StoredFieldsConsumer
--> TwoStoredFieldConsumers
-> code: StoredFieldsProcessor
-> code: DocValuesProcessor
*/
DocumentsWriterPerThread 中具体负责索引工作的是IndexingChain,这些类跟持久化到磁盘上得索引文件都存在对应关系。
DocFieldProcessor 继承DocConsumer ,负责收集所有的field的信息,然后传给相应的per-field consumers , 来处理这些信息,具体的事情由他的成员变量,真正干实事的是:
NormsConsumer: 写 _X.nrm 文件,写归一化的文件。
FreqProxTermsWriter:写_X.tim,_X.tip, _X.doc, _X.pos文件。
TermsVectorConsumer:写_X.tvx ,_X.tvd, _X.tvf 文件。
StoredFieldsProcessor: 写_X.fnm, _X.fdt,_X.fdx 文件。
在DocFieldProcessor中,用一个DocFieldProcessorPerField[]的数组来保存每一个field对应的处理对象,因为每一个对象都是复用的。
本文详细解析了索引工作流程中的关键组件及其作用,包括DocConsumer、DocFieldProcessor、DocFieldConsumer等,深入理解每个步骤如何协作实现高效索引。
123

被折叠的 条评论
为什么被折叠?



