lucene 4.6 之indexing 之 IndexChain,索引数据结构

来源:互联网 发布:mysql查询大于小于 编辑:程序博客网 时间:2024/06/06 02:22
      /*      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对应的处理对象,因为每一个对象都是复用的。