0

在我当前的 Lucene 4.3 实现中,有数百万条索引记录,我执行常规 search() 并获取 topDocs.totalHits 作为结果计数。

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

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

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

问题 2:我知道我可以提供“上一个”和“下一个”选项来进行分页,但无论如何我仍然可以提供“最后一个”页面选项,为此我需要在最后一页开始。

请建议。

问候, 拉古

4

1 回答 1

0

1 - 它仍然会在totalHits. 听起来,它会告诉您点击总数,即使该数字大于您请求的点击数。

2 - 它确实在某种程度上提出了一个问题,即为什么要跳到最后一页,即。最坏的结果。无论如何,最好的方法是使用接受 a 的搜索调用Collector。例如,传入 aTopScoreDocCollector将允许您获取最后一页,例如:

int pageSize = 10;
TopScoreDocCollector collector = TopScoreDocCollector.create(maxHits, true);
searcher.search(query, collector);
collector.topDocs(collector.getTotalHits() - pageSize);
于 2013-10-18T16:28:38.227 回答