2011-02-15 64 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