Lucene4.3.1 两种分页方式
Please read full article from Lucene4.3.1 两种分页方式
Lucene有两种分页方式
1、直接对搜索结果进行分页,数据量比较少的时候可以用这种方式,分页代码核心参照:
1
2
3
4
5
6
7
8
| 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(...)
ScoreDoc after:为上次搜索结果ScoreDoc总量减1;
Query query:查询方式
int n:为每次查询返回的结果数,即每页的结果总量
一个简单的使用示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //可以使用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; |
No comments:
Post a Comment