Lucene筆記13-Lucene的搜尋-基於searchAfter的實現
阿新 • • 發佈:2018-11-04
一、使用searchAfter完成分頁查詢
searchAfter()方法原理是獲取上一頁的最後一個元素和pageSize,再從最後一個元素的後一個開始取pageSize條資料,這就是需要展示的結果了。searchAfter()方法需要三個引數:ScoreDoc after, Query query, int n。after是上一頁的最後一個scoreDoc,query是查詢的內容,n是總條數。如果是第一頁,scoreDoc傳遞null,這個需要特別注意。
二、searchAfter的例子
public void searchPageBySearchAfter(String queryString, int pageIndex, int pageSize) { try { IndexSearcher indexSearcher = new IndexSearcher(indexReader); QueryParser queryParser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35)); Query query = queryParser.parse(queryString); TopDocs topDocs = indexSearcher.search(query, pageIndex * pageSize); ScoreDoc[] scoreDocs = topDocs.scoreDocs; ScoreDoc scoreDoc; int last = (pageIndex - 1) * pageSize - 1; // 查詢第一頁的時候scoreDoc傳null if (last < 0) { scoreDoc = null; } else { scoreDoc = scoreDocs[last]; } topDocs = indexSearcher.searchAfter(scoreDoc, query, pageSize); // 分頁查詢 for (ScoreDoc sd : topDocs.scoreDocs) { Document document = indexSearcher.doc(sd.doc); System.out.println(sd.doc + ":" + document.get("path") + " " + document.get("fileName")); } indexSearcher.close(); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }