Lucene4.3.1 两种分页方式

Lucene有两种分页方式

1、直接对搜索结果进行分页,数据量比较少的时候可以用这种方式,分页代码核心参照:

ScoreDoc[] sd = XXX;
// 查询起始记录位置
int begin = pageSize * (currentPage - 1);
// 查询终止记录位置
int end = Math.min(begin + pageSize, sd.length);
for (int i = begin; i < end && i <totalHits; i++) {
//对搜索结果数据进行处理的代码
}

2、使用searchAfter(...)

Lucene提供了五个重载方法,可以根据需要使用

Lucene4.3.1 两种分页方式_第1张图片

ScoreDoc after:为上次搜索结果ScoreDoc总量减1;

Query query:查询方式

int n:为每次查询返回的结果数,即每页的结果总量

一个简单的使用示例:

//可以使用Map保存必要的搜索结果
Map<String, Object> resultMap = new HashMap<String, Object>();
ScoreDoc after = null;
Query query = XX
TopDocs td = search.searchAfter(after, query, size);

//获取命中数
resultMap.put("num", td.totalHits);

ScoreDoc[] sd = td.scoreDocs;
for (ScoreDoc scoreDoc : sd) {
//经典的搜索结果处理
}
//搜索结果ScoreDoc总量减1
after = sd[td.scoreDocs.length - 1]; 
//保存after用于下次搜索,即下一页开始 
resultMap.put("after", after);

return resultMap;


参考:http://qindongliang1922.iteye.com/blog/1931191

你可能感兴趣的:(分页,Lucene,searchAfter)