浏览 1757 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-03-16
其实本来是很简单的,写的文件无非就是字段信息和term信息,但是lucene要保证多线程,所以很多方法后面有个PerThread。为了保证功能的单一和可扩展性,用了很多的Consumer,而这些Consumer的源头是Processor。最后问了实现filed的重用,有很多的类是以PerField结尾的。 链同基本索引链有相似的树形结构,由基本索引链中每个层次的对象调用addThreads 进行创建的,负责每个线程的对文档的处理。 DocFieldProcessorPerThread 是线程索引链的源头,由DocFieldProcessor.addThreads(…)创建 DocFieldProcessorPerThread 对象结构如下: 对索引域进行处理 DocFieldConsumerPerThread consumer 类型为 DocInverterPerThread , 由 DocInverter.addThreads 创建 InvertedDocConsumerPerThread consumer 类型为TermsHashPerThread , 由 TermsHash.addThreads 创建 TermsHashConsumerPerThread consumer 类型为 FreqProxTermsWriterPerThread,由FreqProxTermsWriter.addThreads 创建, 负责每个线程的freq,prox 信息处理 TermsHashPerThread nextPerThread TermsHashConsumerPerThread consumer 类型 TermVectorsTermsWriterPerThread,由TermVectorsTermsWriter 创建, 负责每个线程的tvx,tvd,tvf 信息处理 InvertedDocEndConsumerPerThread endConsumer 类型为 NormsWriterPerThread,由NormsWriter.addThreads 创建,负责nrm 信息的处理 114 对存储域进行处理 StoredFieldsWriterPerThread fieldsWriter 由StoredFieldsWriter.addThreads 创建,负责 fnm,fdx,fdt 的处理。 FieldInfos fieldInfos; 域索引链: 每个域也有自己的索引链,称为域索引链,每个域的索引链也有同线程索引链有相似的树形结 构,由线程索引链中每个层次的每个层次的对象调用addField 进行创建,负责对此域的处理。 和基本索引链及线程索引链不同的是,域索引链仅仅负责处理索引域,而不负责存储域的处 理。 DocFieldProcessorPerField 是域索引链的源头,对象结构如下: DocFieldConsumerPerField consumer 类型为DocInverterPerField,由 DocInverterPerThread.addField 创建 118 InvertedDocConsumerPerField consumer 类型为TermsHashPerField,由 TermsHashPerThread.addField 创建 TermsHashConsumerPerField consumer 类型为FreqProxTermsWriterPerField,由 FreqProxTermsWriterPerThread.addField 创建,负责freq, prox 信息的处理 TermsHashPerField nextPerField TermsHashConsumerPerField consumer 类型为TermVectorsTermsWriterPerField,由 TermVectorsTermsWriterPerThread.addField 创建,负责tvx, tvd, tvf 信息的处理 InvertedDocEndConsumerPerField endConsumer 类型为NormsWriterPerField,由 NormsWriterPerThread.addField 创建,负责nrm 信息的处理。 用图来表示就是这链: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |