addPosition方法的源码

来源:互联网 发布:网络系统威胁 网络传输 编辑:程序博客网 时间:2024/05/22 15:04
package indexwriter;


import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermVectorOffsetInfo;


//在invertDocument方法中,通过addPosition方法向postingTable添加位置和信息
//这里addPosition源码
public class AddPosition {
private final void addPosition(String field, String text, int position, TermVectorOffsetInfo offset){

//termBuffer是一个Term类型的对象
termBuffer.set(field, text);

//从postingTable中取出当前的词条对应的Posting对象
Posting ti = (Posting)postingTable.get(termBuffer);

//如果为不为NULL,则说明当前postingTable中已经有了这个词条
if(ti != null)
//取出的词条出现的次数
int freq = ti.freq;
//如果当前存放位置的数组已经被装满了,就创一个新的长度为
//原来两倍 的int型数组
if(ti.position.length == freq){
int [] newPositions = new int[freq * 2];
int [] positions = ti.positions;
for(int i = 0; i < freq; i++)
newPositions[i] = positions[i];
ti.positions = newPositions;

}

//保存新数组进入当前词条的Posting对象中
ti.positions[freq] = position;

if(offset != null)
//如果当前用于存放偏移量的数组已经满了,就创建一个新的
//长度为原来两倍的Int型数组
if(ti.offsets.length == freq){
TermVectorOffsetInfo[] newOffsets = new TermVectorOffsetInfo[freq * 2];
TermVectorOffsetInfo[] offsets = ti.offsts;
for(int i = 0; i < freq; i++){
newOffsets[i] = offsets[i];
}
ti.offsets[freq] = offset;

}
ti.freq = freq +1;
}
//如果ti为NULL,则说明这是一个新的词条
else{
Term term = new Term(field, text, false);
postingTable.put(term, new Posting(term, postion, offset));
}
}
0 0
原创粉丝点击