FieldsWriter的addDocument方法

131 篇文章 2 订阅
package indexwriter;
//FieldWriter的addDocument方法
import java.io.IOException;


import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;


public class FieldWriter {
final void addDocument(Document doc) throws IOException{

//对所有的fields进行遍历,计算有多少个field是需要存储的
while(fields.hasMoreElements()){
Field field = (Field) field.nextElement();
if(field.isStored())
storedCount++;

}

//将总共需要存储的field的数量写入.fdt文件
fieldsStream.writeVInt(storedCount);

//获取所有的fields
fields = doc.fields();

//遍历
while(fields.hasMoreElements()){
Field field = (Field) fields.nextElement();

//如果field需要存储
if(field.isStored()){
//向.fdt中写入field的编号
fieldsStream.writeVInt(fieldInfos.fieldNumber(field.name()));

//使用位运算来来表示当前field的各种属性
byte bits = 0;
if(field.isTokenized())
bits |= FieldsWriter.FIELD_IS_TOKENIZED;
if(field.isBinary())
bits |= FieldsWriter.FIELD_IS_BINARY;
if(field.isCompressed())
bits |= FieldsWriter.FIELD_IS_COMPRESSED;
//向.fdt中写入field的属性
fieldsStream.writeByte(bits);

//如果fields需要压缩
if(field.isCompressed())
{
//compression is enable for the current field
byte[] data = null;

//如果这是一个二进制的field
if(field.isBinary()){

//将其压缩
data = compress(field.binaryValue());
}else{

//不是二进制的field,按UTF-8方式读出byte码然后压缩
data = compress(field.stringValue().getBytes("UTF-8"));
}

//记录下field数据长度
final int len = data.length;

//向.fdt中写入长度
fieldsStream.writeVint(len);

//向.fdt中写入field的值
fieldsStream.writeBytes(data, len);
}

//如果field不需要压缩
else{

//如果field是二进制
if(fields.isBinary){

//把二进制字节取出
byte[] data = field.binaryValue();

//计算field长度
final int len = data.length;

//向.fdt中写入长度
fieldsStream.writeVint(len);

//向.fdt中写入field的值
fieldsStream.writeBytes(data, len);
}

//如果field不需要压缩
else{

//如果field是二进制
if(field.binaryValue()){

//把二进制按字节取出
byte[] data = field.binaryValue();

//计算field长度
final int len = data.length;

//向.fdt中写入长度
fieldsStream.writeVint(len);

//向.fdt中写入field中写入field的值
fieldsStream.writeBytes(data, len);

}else{
//如果不是二进制的就直接向.fdt中写入field的值
fieldStream.writeString(field.stringValue());
}
}
}

}

}



}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨鑫newlfe

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

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

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

打赏作者

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

抵扣说明:

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

余额充值