Lucene查询结果Hits的二次封装

<clk>OSPod.Forum使用Lucene作为搜索引擎核心,对于Lucene的分页,OSPod对Hits进行了二次封装,取出所需结果集后,关闭Hits,极大提高搜索效率。参考代码如下:</clk>



/**
*索引分页对象
*/
private Paginationpage;
/**
*命中结果数据数
*/
private int hitsLength = 0 ;
/**
*当前分页的命中结果集
*/
private Listresults;
/**
*用于分页的最大结果数
*/
private int total = 0 ;

/**
*构造方法,创建并初始化索引结果集对象
*
@param hits查询命中结果
*
@param <clk>start结果集提取其实位置</clk>
*
@param count当前提取数
*
@param totalLimit用于分页的最大结果集数,限制提取的最大结果数有利于提供系统查询性能
*/
public IndexResultSet(Hitshits, int start, int count, int totalLimit){
results
= new ArrayList();
page
= PaginationUtils.create();
hitsLength
= hits.length();
if (hitsLength > totalLimit){
total
= totalLimit;
}
else {
total
= hitsLength;
}
int pageSize = count;
if (start + count > total){
count
= total - start;
}
page.init(start,count,total,pageSize);
intend=start+count;
try{
Documentdoc;
for(inti=start;i<end;i++){
doc
=hits.doc(i);
Iteratoriter
=doc.getFields().iterator();
EMapdata
=newEMap();
Stringname,value,lvalue;
while(iter.hasNext()){
Fieldf
=(Field)iter.next();
name
=f.name();
value
=doc.get(name);
data.setValue(name,value);
}
data.setValue(
"score__",hits.score(i));
data.setValue(
"docid__",hits.id(i));
results.add(data);
}
}
catch(IOExceptionex){
thrownewIndexException("索引结果集获取出错",ex);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值