Lucene查询结果Hits的二次封装
来源:互联网 发布:淘宝盗用他人图片处罚 编辑:程序博客网 时间:2024/05/19 15:20
原文发布在: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);
}
}
* 索引分页对象
*/
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查询结果Hits的二次封装
- Lucene查询结果Hits的二次封装
- Lucene查询结果Hits的二次封装 .
- lucene-hits和评分
- Android 订单管理,查询,修改,MVP,OkHttp3的二次封装,
- Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
- Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
- Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
- Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
- Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分
- Lucene的检索优化(二)--Hits的改进
- AFNetWorking的二次封装
- Volley的二次封装
- glog的二次封装
- ViewHolder的二次封装
- OkHttp的二次封装
- AFNetWorking的二次封装
- Volley的二次封装
- 《程序员》10期上市,解析2.0时代的商业模式:SaaS
- tabTest
- 如何获取客户端MAC地址(三个方法)
- C# 排序算法的实现
- C#动态调用非托管DLL
- Lucene查询结果Hits的二次封装
- js 基本
- 编码问题,一定要重视了!~~~
- 工作流应用之jBpm(一)
- asp学习错误一览01
- C文件操作相关函数解析
- 函数从C到C++迁移,出现C2732或LNK2001错误
- voip网站
- 0~3个月新生儿喂养