2013-10-17 51 views
0

在我目前實現的Lucene 4.3中,有數百萬的索引記錄,我執行常規搜索()並獲取topDocs.totalHits作爲結果數。如何使用searchAfter方法獲得總結果數

作爲其中的一部分,我將所有結果存儲在會話中,然後讓用戶對結果進行分頁。藉此,我可以顯示「First」,「Previous」,「Next」和「Last」鏈接以及「第1頁,共500頁」顯示。

很明顯,這導致了內存問題,我現在決定使用searchAfter()方法,因此避免將巨大的結果集存儲在內存中。

問題1:在這種情況下如何獲得總結果數?這是否可能,因爲我不會得到整個結果集?

問題2:我知道我可以爲分頁提供「上一頁」和「下一頁」選項,但無論如何,我仍然可以提供「最後」頁面選項,因爲我需要提供文檔在最後一頁開始之前的對象。

請建議。

問候, Raghu

回答

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