DocumentWriter的addDocument方法

131 篇文章 2 订阅
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);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨鑫newlfe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值