Lucene如何对查询的结果进行分页

郑宁 发布于 2010/12/28 13:14
阅读 4K+
收藏 3
TopScoreDocCollector topCollector = TopScoreDocCollector.create(
					100, false);		
searcher.search(query, topCollector);
System.out.println("命中:" + topCollector.getTotalHits());
 // 查询当页的记录  
ScoreDoc[] docs = topCollector.topDocs((pageNO - 1) * pageSize,
					pageSize).scoreDocs;;

 

 

Lucene的分页这样是可以,但是如果我想查询到的结果按时间倒序显示呢,就是当得分相同的时候按时间的倒序来返回数据。

 

//索引排序条件
SortField[] sortfield = new SortField[] { SortField.FIELD_SCORE, new SortField(null,
 SortField.DOC, true) };
Sort sort = new Sort(sortfield);
			
TopDocs topDocs = searcher.search(query, null, 10, sort);
System.out.println("检索到总数:" + topDocs.totalHits);
ScoreDoc[] scoreDocs = topDocs.scoreDocs;

 

Lucene的排序不支持分页,不知道大家是怎么解决这个问题的?

加载中
0
panloon
panloon

查询是非常快的,再检索一下,分页就可以了

0
红薯
红薯

Lucene 的查询结果 Hits 对象中就可以直接分页

建议看 Lucene In Action 这本书,讲的很清楚

0
郑宁
郑宁

引用来自#3楼“红薯”的帖子

Lucene 的查询结果 Hits 对象中就可以直接分页

建议看 Lucene In Action 这本书,讲的很清楚

首先 谢谢上面2位的回答

可能是我的标题误导大家了  我一会改了

我用lucene可以分页  也可以排序

我想对查询排序后的结果 以分页的形式去提取

Hits 现在已经弃用了 改成了TopDocs 但是他们的分页原理是一样的

这样等于每次我都要2次查询 头一次查询我才能知道符合的记录数 第二次我才能按照这个数去查询出所有符合的记录

但是我看到solr 已经支持 start 参数 就是从某个位置开始  感觉lucene 想要用于企业应用还是有些差距

0
红薯
红薯

两次查询没关系的,lucene都说了,它的性能极其高,不用担心这个,除非你是跟google一个级别的

0
郑宁
郑宁

哦 这个我没有异议

就是感觉来回查有些繁琐 呵呵

谢谢指教···

0
许文强
许文强
郑宁:楼主你是怎么做的?我现在是既要排序又要过滤又要分页,还没有找到一个好的解决方案。
0
xiaogang0805
xiaogang0805
如果这样有10W条记录。你是一次性取出记录再在这上面分页吗?如果一次的性取10W条。会不会出现崩溃
0
懒羊羊和灰太狼的故事
懒羊羊和灰太狼的故事
求代码,最近在学,关键字高亮怎么弄?
返回顶部
顶部