本文通過Lucene的API實作了分頁查詢.
目錄
- 1 Lucene的分頁查詢
- 2 代碼示例
- 3 分頁查詢結果
- 版權聲明
搜尋内容過多時, 需要考慮分頁顯示, 像這樣:
說明: Lucene的分頁查詢是在記憶體中實作的.
/**
* 檢索索引(實作分頁)
* @throws Exception
*/
@Test
public void searchIndexByPage() throws Exception {
// 1. 建立分析器對象(Analyzer), 用于分詞
// Analyzer analyzer = new StandardAnalyzer();
// 使用ik中文分詞器
Analyzer analyzer = new IKAnalyzer();
// 2. 建立查詢對象(Query)
// bookName:lucene
// 2.1 建立查詢解析器對象
// 參數一: 指定一個預設的搜尋域
// 參數二: 分析器
QueryParser queryParser = new QueryParser("bookName", analyzer);
// 2.2 使用查詢解析器對象, 執行個體化Query對象
// 參數: 查詢表達式
Query query = queryParser.parse("bookName:lucene");
// 3. 建立索引庫目錄位置對象(Directory), 指定索引庫的位置
Directory directory = FSDirectory.open(new File("/Users/healchow/Documents/index"));
// 4. 建立索引讀取對象(IndexReader), 用于讀取索引
IndexReader reader = DirectoryReader.open(directory);
// 5. 建立索引搜尋對象(IndexSearcher), 用于執行搜尋
IndexSearcher searcher = new IndexSearcher(reader);
// 6. 使用IndexSearcher對象, 執行搜尋, 傳回搜尋結果集TopDocs
// search方法: 執行搜尋
// 參數一: 查詢對象
// 參數二: n - 指定傳回排序以後的搜尋結果的前n個
TopDocs topDocs = searcher.search(query, 10);
// 7. 處理結果集
// 7.1 列印實際查詢到的結果數量
System.out.println("實際查詢的結果數量: "+topDocs.totalHits);
// 7.2擷取搜尋的結果數組
// ScoreDoc中: 有我們需要的文檔的id, 有我們需要的文檔的評分
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
// 增加分頁實作 ========= start
// 目前頁
int page = 2;
// 每頁的大小
int pageSize = 2;
// 計算記錄起始數
int start = (page - 1) * pageSize;
// 計算記錄終止數 -- 得到資料索引與實際結果數量中的最小值, 防止數組越界
// 資料索引: start + pageSize
// 實際的結果數量: scoreDocs.length
int end = Math.min(start + pageSize, scoreDocs.length);
// 增加分頁實作 ========= end
for(int i = start; i < end; i++){
System.out.println("= = = = = = = = = = = = = = = = = = =");
// 擷取文檔Id和評分
int docId = scoreDocs[i].doc;
float score =scoreDocs[i].score;
System.out.println("文檔Id: " + docId + " , 文檔評分: " + score);
// 根據文檔Id, 查詢文檔資料 -- 相當于關系資料庫中根據主鍵Id查詢
Document doc = searcher.doc(docId);
System.out.println("圖書Id: " + doc.get("bookId"));
System.out.println("圖書名稱: " + doc.get("bookName"));
System.out.println("圖書價格: " + doc.get("bookPrice"));
System.out.println("圖書圖檔: " + doc.get("bookPic"));
System.out.println("圖書描述: " + doc.get("bookDesc"));
}
// 8. 釋放資源
reader.close();
}
這裡查詢到的結果共有3條, 是以第2頁隻有一條結果:
作者: 馬瘦風
出處: 部落格園 馬瘦風的部落格
您的支援是對部落客的極大鼓勵, 感謝您的閱讀.
本文版權歸部落客所有, 歡迎轉載, 但請保留此段聲明, 并在文章頁面明顯位置給出原文連結, 否則部落客保留追究相關人員法律責任的權利.