2011-02-15 63 views
4

我在Java 5環境中使用Lucene 3.0.1。 我一直在研究這個問題,但文檔沒有給出任何直接的答案。我可以讓Lucene返回無限數量的搜索結果嗎?

使用搜索方法

TopFieldDocs search(Weight weight, Filter filter, int nDocs, Sort sort) 

我總是需要提供最大數量的搜索結果nDocs

如果我想要全部匹配結果怎麼辦?感覺就像設置nDocsInteger.MAX_VALUE是一種這樣做的hacky方法(並且會導致速度和內存性能下降?)。

任何其他誰有什麼想法?

回答

6

您正在使用a search method,返回頂部n匹配查詢。

other (more low-level) methods沒有限制,它在文檔中說,「應用程序應該只使用它,如果他們需要所有的匹配文檔。高級搜索API(搜索(查詢,int))通常效率更高,因爲它跳過非高分的命中。「

因此,如果您確實需要所有文檔,則可以使用低級API。我懷疑它將性能上的差異傳遞給高級API的真正高限。如果你需要所有的文件(而且其中有很多文件),那麼這種方法會變慢,特別是在涉及排序的情況下。

+1

謝謝Thilo,這非常有幫助。我想出了另一種方法來做到這一點,即使用searcher.maxDoc()作爲nDoc,但我認爲這也會對性能產生影響。 – 2011-02-15 23:52:40