Lucene之分页查询

时间:2025-01-30 21:46:40
package com.jmj.project.web; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; public class Snippet { public void indexSearch() { try { //IK中文分词器--智能分词 Analyzer analyzer = new IKAnalyzer(); //索引路径 String indexPath = "/home/iflow/luceneindex"; Directory directory = FSDirectory.open(new File(indexPath)); IndexReader ireader = IndexReader.open(directory); //索引查询 IndexSearcher isSearcher = new IndexSearcher(ireader); QueryParser qp = new QueryParser(Version.LUCENE_40, "query", analyzer); Query query = qp.parse("关键词"); TopDocs topDocs = isSearcher.search(query, 100); // 输出结果 ScoreDoc[] scoreDocs = topDocs.scoreDocs; int pageIndex = Integer.parseInt(1 + ""); int pageSize = Integer.parseInt(10 + ""); int start = (pageIndex - 1) * pageSize; int end = pageSize * pageIndex; if (end > scoreDocs.length) { end = scoreDocs.length; } for (int i = start; i < end; i++) { Document targetDoc = isSearcher.doc(scoreDocs[i].doc); System.out.println(targetDoc.get("id") + targetDoc.get("name")); } } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } }