如何在lucene中实现分页?

如何在lucene中实现分页?,lucene,Lucene,想知道如何在Lucene中实现分页,因为它本身并不支持分页。我基本上需要搜索“前10个条目”(基于某些参数),然后搜索“下10个条目”,依此类推。同时我也不想让Lucene占用我的记忆。 任何建议都将不胜感激。 提前感谢。您需要应用自己的分页机制,类似于下面的机制 IList<Document> luceneDocuments = new List<Document>(); IndexReader indexReader = new IndexReader(dire

想知道如何在Lucene中实现分页,因为它本身并不支持分页。我基本上需要搜索“前10个条目”(基于某些参数),然后搜索“下10个条目”,依此类推。同时我也不想让Lucene占用我的记忆。 任何建议都将不胜感激。
提前感谢。

您需要应用自己的分页机制,类似于下面的机制

 IList<Document> luceneDocuments = new List<Document>();

 IndexReader indexReader = new IndexReader(directory);
 Searcher searcher = new IndexSearcher(indexReader);

 TopDocs results = searcher.Search("Your Query", null, skipRecords + takeRecords);
 ScoreDoc[] scoreDocs = results.scoreDocs;

 for (int i = skipRecords; i < results.totalHits; i++)
 {
      if (i > (skipRecords + takeRecords) - 1)
      {
           break;
      }

      luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
 }
IList luceneDocuments=new List();
IndexReader IndexReader=新的IndexReader(目录);
Searcher Searcher=newindexsearcher(indexReader);
TopDocs results=searcher.Search(“您的查询”,null,skipRecords+takeRecords);
ScoreDoc[]scoreDocs=results.scoreDocs;
for(int i=skipRecords;i(skipRecords+takeRecords)-1)
{
打破
}
添加(searcher.Doc(scoreDocs[i].Doc));
}
您会发现迭代scoreDocs数组是轻量级的,因为在调用searcher.Doc方法之前,索引中包含的数据并没有真正被使用


请注意,这个例子是针对Lucene.NET 2.3.2的一个稍加修改的版本编写的,但是基本原理应该适用于Lucene的任何最新版本。

另一个版本的loop,继续凯恩的代码片段

....................

ScoreDoc[] scoreDocs = results.scoreDocs;
int pageIndex = [User Value];
int pageSize = [Configured Value];

int startIndex = (pageIndex - 1) * pageSize;
int endIndex = pageIndex * pageSize;
endIndex = results.totalHits < endIndex? results.totalHits:endIndex;

for (int i = startIndex ; i < endIndex ; i++)
{
     luceneDocuments.Add(searcher.Doc(scoreDocs[i].doc));
}
。。。。。。。。。。。。。。。。。。。。
ScoreDoc[]scoreDocs=results.scoreDocs;
int pageIndex=[用户值];
int pageSize=[配置值];
int startIndex=(页面索引-1)*页面大小;
int endIndex=pageIndex*pageSize;
endIndex=results.totalHits
我用下面的方法来分页,也许对某人有帮助。如果你知道一个更好的策略,特别是从性能的角度,请分享

   public TopDocs search(String query, int pageNumber) throws IOException, ParseException {
        Query searchQuery = parser.parse(query);
        TopScoreDocCollector collector = TopScoreDocCollector.create(1000, true);

        int startIndex = (pageNumber - 1) * MyApp.SEARCH_RESULT_PAGE_SIZE;
        searcher.search(searchQuery, collector);

        TopDocs topDocs = collector.topDocs(startIndex, MyApp.SEARCH_RESULT_PAGE_SIZE);
        return topDocs;
    }

我同意,Lucene中的结果没有查询数据库时的结果那么重,因此您可以轻松实现自定义分页方法,而不必处理性能问题。这里的问题是,当您搜索分页数较高的大型数据集时,搜索速度会变慢。这就像你在搜索一件东西,然后省略了搜索的一部分。在这篇文章中检查批准的答案:[Lucene 4 Pagination][1][1]:你好,阿西夫,你能解释一下吗?我想得到所有的结果,然后翻阅它们。谢谢