想知道如何在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. 如何在電話中實現分頁
- 2. 如何在HBase中實現分頁?
- 3. 如何在wordpress中實現分頁
- 4. 如何在Struts 2中實現分頁
- 5. 如何在listView中實現分頁?
- 6. 如何在列表中實現分頁?
- 7. 如何在Mongodb中實現分頁?
- 8. 如何在MVVM中實現分頁?
- 9. 如何在codeigniter中實現ajax分頁?
- 10. 如何在Lucene 4.2.1中實現基本的分析器?
- 11. 如何在Solrnet/Solr(Lucene)中實現分組?
- 12. 在lucene中實現反饋
- 13. 如何實現分頁?
- 14. 如何實現YQL分頁?
- 15. 如何實現angularJS分頁
- 16. UIWebView如何實現分頁?
- 17. 如何實現Wordpress分頁?
- 18. 如何實現分頁?
- 19. 如何實現分頁?
- 20. 如何實現分頁
- 21. 在Coldfusion中實現分頁
- 22. 在repeater中實現分頁
- 23. Lucene 4分頁
- 24. 使用FieldBridges實現Lucene分析器
- 25. 如何使用jTable實現Lucene TableSearch
- 26. Apache Lucene的實現
- 27. API分頁,如何實現頁面令牌分頁方法?
- 28. 在Android中的ListView中實現分頁
- 29. ASP.NET MVC - 如何實現分頁?
- 30. ServiceStack的Redis如何實現分頁
檢查在這個崗位覈定回答: [Lucene的4分頁] [1] [1]:http://stackoverflow.com/a/24533377/1080485 – 2015-09-07 12:10:35