- Lucene 4 Cookbook
- Edwood Ng Vineeth Mohan
- 283字
- 2021-07-16 14:07:49
Enumerating results
We have already previewed how the results are enumerated from the previous sample code. You might have noticed that the major component in search results is TopDocs. Now, we will show you how to leverage this object to paginate results. Lucene does not provide pagination functionality, but we can still build pagination easily using what's available in TopDocs.
How to do it...
Here is a sample implementation on pagination:
public List<Document> getPage(int from , int size){ List<Document> documents = new ArraList<Document>(); Query query = parser.parse(searchTerm); TopDocs hits = searcher.search(query, maxNumberOfResults); int end = Math.min(hits.totalHits, size); for (int i = from; i < end; i++) { int docId = hits.scoreDocs[i].doc; //load the document Document doc = searcher.doc(docId); documents.add(doc); } return documents; }
How it works…
When we perform search in Lucene, actual results are not preloaded immediately. In TopDocs, we only get back an array of ranked pointers. It's called ranked pointers because they are not actual documents, but a list of references (DocId). By default, results are scored by the scoring mechanism. We will see more about scoring in detail in Introduction section Chapter 7, Flexible Scoring. For paging, we can calculate position offset, apply pagination ourselves, and leverage something like what we showed in the sample code to return results by page. Developers at Lucene actually recommend re-executing a search on every page, instead of storing the initial search results (refer to http://wiki.apache.org/lucene-java/LuceneFAQ#How_do_I_implement_paging.2C_i.e._showing_result_from_1-10.2C_11-20_etc.3F). The reasoning is that people are usually only interested in top results and they are confident in Lucene's performance.
Note
This code assumes that parser (QueryParser), searcher (IndexSearcher), and maxNumberOfResults
are already initialized. Note that this sample is for illustrative purpose only and it's not optimized.
- 案例式C語言程序設計
- Node.js 10實戰(zhàn)
- 算法零基礎一本通(Python版)
- Cocos2d-x游戲開發(fā):手把手教你Lua語言的編程方法
- C語言程序設計(第2版)
- 技術領導力:程序員如何才能帶團隊
- Rust Cookbook
- Mastering Python High Performance
- 網(wǎng)站構建技術
- Selenium Testing Tools Cookbook(Second Edition)
- iOS自動化測試實戰(zhàn):基于Appium、Python與Pytest
- Linux Shell核心編程指南
- PHP+Ajax+jQuery網(wǎng)站開發(fā)項目式教程
- Java語言程序設計教程
- Spring+Spring MVC+MyBatis從零開始學