DocumentWriter的addDocument方法

来源:互联网 发布:怎么更新windows系统 编辑:程序博客网 时间:2024/06/08 03:09
package document;
//从IndexWriter的方法实现看出来,它是使用DocumentWriter这个类的addDocument方法,
//来完成实际的数据存储工作。
//下面是addDocument源码
import java.io.IOException;
public class DocumentWriter {
final void addDocument(String segment, Document doc) throws IOException{

//初始化一个FieldInfos类,用来存储加入索引的Document中的各个Field信息
fieldInfos = new FieldInfos();
fieldInfos.add(doc);

//把所有的field的信息写入.fnm文件
fieldInfos.write(directory, segment + ".fnm");

//实例化一个FieldWriter, FieldWriter会负责写入.fdx 和 .fdt文件
FieldsWriter fieldsWriter = new FieldsWriter(directory, segment, fieldInfos);

try{

//将Document中的各个Field信息写入 .fdx 文件和 .fdt 文件
fieldsWriter.addDocument(doc);


}finally{
fieldsWriter.close();
}


//把用于存储所有词条的HashTable初始化
postingTable.clear();

//初始化一个int型数组,用于记录当前Document中所有的Field的长度
fieldLengths = new int[fieldInfos.size()];

//初始化一个int型数组,用于记录当前Document中所有Field在分析完毕
//后的最终Position
fieldPosition = new int[fieldInfos.size()];

//初始化一个int型数组,用于记录当前Document中所有Field在分析完毕后的最终Offset
fieldOffsets = new int[fieldInofs.size()];

//初始化一个float型数组,用于记录当前Document中所有的Field的boost值
fieldBoosts = new float[fieldInfo.size()];
Analys.fill(fieldBoosts, doc.getBoost());

//对Document中各个Field值进行“倒排”
inverDocument(doc);

//对词条表进行排序
Posting[] posting = sortPostingTable();

//把词条信息写入索引,主要是向.frq 和 。prx文件中写入词条的频率和位置信息
writePosting(posting, segment);

//把一些得分信息写入索引,主要是向.f文件中写入
writerNorms(segment);
}
}
0 0
原创粉丝点击