lucene分页查询,只需对查询出来的ScoreDoc进行简单改造即可实现分页功能
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();
}
}
}