Lucene查询结果Hits的二次封装

原创 2007年09月24日 17:08:00

原文发布在: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);
        }
    }

Lucene索引的增删改查和二次检索

本博客是本人使用lucene时写的工具类。包含对索引的增删改查。以及对检索结果的多次子检索。lucene结果高亮显示...
  • a8761087
  • a8761087
  • 2015年07月16日 13:20
  • 589

Lucene二次搜索

Lucene是可以做到的,利用lucene的Filter,具体可以查看lucene的api中的org.apache.lucene.search.CachingWrapperFilter,它可以缓存上次...
  • xyx139
  • xyx139
  • 2011年11月09日 19:36
  • 921

Lucene学习总结之七:Lucene搜索过程解析

一、Lucene搜索过程总论 搜索的过程总的来说就是将词典及倒排表信息从索引中读出来,根据用户输入的查询语句合并倒排表,得到结果文档集并对文档进行打分的过程。 其可用如下图示: 总共包括以下...
  • jediael_lu
  • jediael_lu
  • 2014年06月25日 14:23
  • 6598

Lucene查询结果高亮

检索结果高亮对于用户的体验度和友好度非常重要,可以快速标记出用户检索对关键词。本例中的索引仍使用上一篇博客( Lucene查询索引)中创建的索引,代码高亮参考了Lucene4.x高亮 fast高亮 前...
  • napoay
  • napoay
  • 2016年04月23日 13:04
  • 3677

mysql如何根据select结果进行二次连接查询

mysql如何根据select结果进行二次连接查询 sql代码 select a.*,b.* from( 查询结果1 )a left join database_table b on a....
  • u014344668
  • u014344668
  • 2017年12月18日 16:31
  • 79

mysql 在查询结果中进行二次查询

第一次查询:查询身份证编号和出现次数 select cardid,count(cardid) as total from p_person_info group by cardid 在...
  • zsg88
  • zsg88
  • 2017年12月21日 13:40
  • 528

Lucene&全文检索

目录结构: 1.全文检索 2.Lucene入门 3.Lucene进阶 全文检索一, 生活中的搜索: 1.Windows系统中的有搜索功能:打开“我的电脑”,按“F3”就可以使用查...
  • zhang18024666607
  • zhang18024666607
  • 2017年10月12日 16:39
  • 357

Lucene查询方式总结

-------------------------------------------------- IndexReader的设计 --------------------------------...
  • u010366796
  • u010366796
  • 2015年04月04日 14:37
  • 853

Lucene查询索引

Lucene简介和怎样创建索引可以参考我前面的两篇博客Lucene全文检索基础和Lucene创建索引,索引创建以后可以使用luke(使用和Lucene版本相对应的Luke版本,比如Lucene版本是4...
  • napoay
  • napoay
  • 2016年04月22日 11:07
  • 2937

Lucene查看分词结果

/** * 获取分词结果 * @param 输入的字符串 * @param 分词器 * @return 分词结果 */ public static List getWords(String ...
  • xsi640
  • xsi640
  • 2014年06月11日 10:49
  • 3142
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lucene查询结果Hits的二次封装
举报原因:
原因补充:

(最多只允许输入30个字)