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查询结果集分页代码

  • 2008年12月14日 20:26
  • 3KB
  • 下载

lucene利用sort对查询结果进行排序示例

利用sort对查询结果进行排序示例 对于要排序的字段,在索引的时候可以Field.Index.NOT_ANALYZED package com.cn; import org.apache...
  • yyunix
  • yyunix
  • 2011年10月18日 12:56
  • 1740

lucene学习记录(3) - 结果排序, 范围查询

前言 推荐Lucene文章, 也是本人上一篇博客里提到的 这次是系列文章>, 传送门 结果排序 应业务需求, 要把上一篇文章中的结果按照排序(文字的发布时间) 所以Document要增加一个ti...
  • Sidyhe
  • Sidyhe
  • 2016年07月06日 13:37
  • 1879

Lucene查询结果高亮

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

ElasticSearch 使用 Inner_hits 查询Parent-Child(父子)文档 - 1.50新特性

inner_hits文档:http://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-inner-hit...

JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示

上一篇介绍了JAVA_WEB项目之Lucene使用中文分词器IKAnalyzer3.2.8

Lucene二次搜索

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

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

本博客是本人使用lucene时写的工具类。包含对索引的增删改查。以及对检索结果的多次子检索。lucene结果高亮显示...

中文分词---2011-10-25 22:42 Lucene分词实现(二次开发流程)

转自:http://hi.baidu.com/zhumulangma/item/fcb2851542a2b924f7625c32 1.1  分词流程 在Lucene3.0中,对分词主要依靠Ana...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Lucene查询结果Hits的二次封装
举报原因:
原因补充:

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