如何使用searchAfter方法获得总结果计数

时间:2013-10-17 22:35:48

标签: lucene pagination

在我目前的Lucene 4.3实现中,有数百万条索引记录,我会定期搜索()并获取topDocs.totalHits作为结果计数。

作为其中的一部分,我将所有结果存储在会话中,然后让用户对结果进行分页。通过这个,我可以显示“第一个”“上一个”“下一个”和“最后一个”链接以及“第1页500”显示。

显然,这导致了内存问题,我现在决定使用searchAfter()方法,因此避免将巨大的结果集存储在内存中。

问题1:在这种情况下,如何获得总结果数?它是否可能,因为我不会得到整个结果集?

问题2:我知道我可以为分页提供“上一页”和“下一页”选项,但无论如何我仍然可以提供“上一页”页面选项,为此我需要提供文档对象就在最后一页开始之前。

请建议。

此致 Raghu

1 个答案:

答案 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);