在我目前的Lucene 4.3实现中,有数百万条索引记录,我会定期搜索()并获取topDocs.totalHits作为结果计数。
作为其中的一部分,我将所有结果存储在会话中,然后让用户对结果进行分页。通过这个,我可以显示“第一个”“上一个”“下一个”和“最后一个”链接以及“第1页500”显示。
显然,这导致了内存问题,我现在决定使用searchAfter()方法,因此避免将巨大的结果集存储在内存中。
问题1:在这种情况下,如何获得总结果数?它是否可能,因为我不会得到整个结果集?
问题2:我知道我可以为分页提供“上一页”和“下一页”选项,但无论如何我仍然可以提供“上一页”页面选项,为此我需要提供文档对象就在最后一页开始之前。
请建议。
此致 Raghu
答案 0 :(得分:0)
1 - 它仍然在totalHits
。听起来,它会告诉你总命中数,即使这个数字大于你所要求的命中数。
2 - 它确实提出了一个问题,为什么你要跳到最后一页,即。 最差结果。无论如何,最好的方法是使用search call the accepts a Collector
。例如,传入TopScoreDocCollector
将允许您获得最后一页:
int pageSize = 10;
TopScoreDocCollector collector = TopScoreDocCollector.create(maxHits, true);
searcher.search(query, collector);
collector.topDocs(collector.getTotalHits() - pageSize);