想知道如何在Lucene中实现分页,因为它本身不支持分页。我基本上需要搜索“前10个条目”(基于某个参数),然后搜索“下10个条目”等等。同时,我不希望Lucene占用内存。 任何建议,将不胜感激。 在此先感谢。如何在lucene中实现分页?
19
A
回答
20
您将需要应用您自己的分页机制,类似于下面的内容。
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));
}
你会发现,在遍历数组scoreDocs将是轻量级的是不是真的使用包含在索引中的数据,直到searcher.Doc方法被调用。
请注意,这个例子是针对Lucene.NET 2.3.2稍微修改过的版本编写的,但基本的主体应该可以针对任何最新版本的Lucene。
+1
我同意,在查询数据库时,Lucene的结果并不像结果那样沉重,因此您可以轻松实现自定义分页方法,而无需处理性能问题 – 2009-06-08 07:59:10
11
循环的另一个版本,继续凯恩的代码片段;
....................
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));
}
2
我用下面的方式来分页,可能会帮助别人。如果你知道更好的策略,特别是从性能的角度来看,请分享。
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;
}
相关问题
- 1. 如何在listView中实现分页?
- 2. 如何在Struts 2中实现分页
- 3. 如何在MVVM中实现分页?
- 4. 如何在codeigniter中实现ajax分页?
- 5. 如何在HBase中实现分页?
- 6. 如何在Solrnet/Solr(Lucene)中实现分组?
- 7. 如何在Lucene 4.2.1中实现基本的分析器?
- 8. 如何实现分页?
- 9. 如何实现分页?
- 10. UIWebView如何实现分页?
- 11. 如何实现分页?
- 12. 在Coldfusion中实现分页
- 13. 在repeater中实现分页
- 14. Lucene 4分页
- 15. 使用FieldBridges实现Lucene分析器
- 16. Apache Lucene的实现
- 17. 如何使用jTable实现Lucene TableSearch
- 18. API分页,如何实现页面令牌分页方法?
- 19. 在Android中的ListView中实现分页
- 20. Cakephp:如何实现自定义分页?
- 21. 如何实现Linq到Xml的分页?
- 22. 如何实现SEF分页(同上) - MODx?
- 23. 如何使用RestSharp实现分页
- 24. 如何使用HTML表实现分页?
- 25. Azure表存储:如何实现分页?
- 26. 如何实现mvc分页视图
- 27. 如何实现Azure表格分页
- 28. 如何实现分页html php mysql
- 29. 如何在代码中的网格视图中实现分页
- 30. 与分页实现
检查在这个岗位核定回答: [Lucene的4分页] [1] [1]:http://stackoverflow.com/a/24533377/1080485 – 2015-09-07 12:10:35