Lucene查询结果Hits的二次封装

原文发布在:http://paomadeng.javaeye.com/blog/126687

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

 

 

/**
     * 索引分页对象
     
*/
    
private  Pagination page;
    
/**
     * 命中结果数据数
     
*/
    
private   int  hitsLength  =   0 ;
    
/**
     * 当前分页的命中结果集
     
*/
    
private  List results;
    
/**
     * 用于分页的最大结果数
     
*/
    
private   int  total  =   0 ;
    
    
/**
     * 构造方法,创建并初始化索引结果集对象
     * 
@param  hits 查询命中结果
     * 
@param  start  结果集提取其实位置
     * 
@param  count  当前提取数
     * 
@param  totalLimit  用于分页的最大结果集数,限制提取的最大结果数有利于提供系统查询性能
     
*/
    
public  IndexResultSet(Hits hits,  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 );
        
int  end  =  start  +  count;
        
try {
            Document doc;
            
for  ( int  i  =  start; i  <  end; i ++ ) {
                doc 
=  hits.doc( i );
                Iterator iter 
=  doc.getFields().iterator();
                EMap data 
=   new  EMap();
                String name, value, lvalue;
                
while (iter.hasNext()){
                    Field f 
=  (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 (IOException ex){
            
throw   new  IndexException( " 索引结果集获取出错 " , ex);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值