lucene 内存索引存储每个field里内容的相关代码

相关的类调用关系
DocumentsWriterPerThread ——>DocFieldProcessor
 
DocumentsWriterPerThread里的consumer对象(类型是DocFieldProcessor)负责field的内数据的存储
 
1 consumer.processDocument(fieldInfos);
   在存储field内容这方面只是简单的把docid,field和fieldinfo放入子成员storedConsumer里
 
2  consumer.finishDocument();
    会取出要储存域里的数据,放入 bufferedDocs子对象(连续的块内存,CompressingStoredFieldsWriter的子成员)里面,在flush disk的时候在把bufferedDocs内的数据写入磁盘
 
==================================================
DocFieldProcessor 负责 .fdt .fdx .tvd .tvx四个文件的数据写入
 
1 DocFieldProcessor调用TwoStoredFieldsConsumers类的flush方法写fdt .fdx 文件
 
storedConsumer.addField(docState.docID, field, fp.fieldInfo);//storedConsumer把存储的docid,field和info数据存储到自己的类里面
 
storedConsumer.flush(state); 负责.fdt .fdx 文件
 
2DocFieldProcessor调用DocInverter类的flush方法写tvd和tvx文件
consumer.flush(childFields, state);负责.tvd .tvx 文件
 
===================================================================
DocumentsWriterPerThread 
 
/** Flush all pending docs to a new segment */
lucene最重要的flush函数,该函数执行完成以后 所有数据都刷新到磁盘,且产生的临时文件是最多的
FlushedSegment flush() 
 
生成的文件如下
 
-rw-r--r-- 1 bf bf 358 2014-07-11 14:53 _0.cfe
-rw-r--r-- 1 bf bf 958 2014-07-11 14:53 _0.cfs
-rw-r--r-- 1 bf bf 72 2014-07-11 14:53 _0.fdt
-rw-r--r-- 1 bf bf 62 2014-07-11 14:53 _0.fdx
-rw-r--r-- 1 bf bf 138 2014-07-11 14:53 _0.fnm
-rw-r--r-- 1 bf bf 83 2014-07-11 14:53 _0_Lucene41_0.doc
-rw-r--r-- 1 bf bf 50 2014-07-11 14:53 _0_Lucene41_0.pay
-rw-r--r-- 1 bf bf 63 2014-07-11 14:53 _0_Lucene41_0.pos
-rw-r--r-- 1 bf bf 116 2014-07-11 14:53 _0_Lucene41_0.tim
-rw-r--r-- 1 bf bf 81 2014-07-11 14:53 _0_Lucene41_0.tip
-rw-r--r-- 1 bf bf 43 2014-07-11 14:53 _0.nvd
-rw-r--r-- 1 bf bf 62 2014-07-11 14:53 _0.nvm
-rw-r--r-- 1 bf bf 288 2014-07-11 14:53 _0.si
-rw-r--r-- 1 bf bf 79 2014-07-11 14:53 _0.tvd
-rw-r--r-- 1 bf bf 62 2014-07-11 14:53 _0.tvx
-rw-r--r-- 1 bf bf 0 2014-07-11 14:48 write.lock
 
原文地址:https://www.cnblogs.com/hdflzh/p/4040900.html