
lucene 3.5版本分页怎么做啊
1个回答
展开全部
已测试过
import java.io.File;
import java.util.Random;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
public class Question937672531867963092 {
public static final String INDEX_PATH = "E:\\lucene-demo-index\\937672531867963092\\";
private static final String FIELD_COIN = "coin";
public static void main(String[] args) {
createIndex();
//我创建的索引里有12394个值为7的Document
print(String.valueOf(7), 1239, 10);
System.out.println("==========");
print(String.valueOf(7), 1240, 10);
System.out.println("==========");
print(String.valueOf(7), 1241, 10);
System.out.println("==========");
}
public static void print(String v, int page, int pageSize) {
try {
Directory directory = FSDirectory.open(new File(INDEX_PATH));
IndexReader indexReader = IndexReader.open(directory);
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
int results = page * pageSize;
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(new BooleanClause(new TermQuery(new Term(FIELD_COIN, v)), BooleanClause.Occur.MUST));
Sort sort = new Sort(new SortField(FIELD_COIN, SortField.INT));
TopDocs topDocs = indexSearcher.search(booleanQuery, results, sort);;
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
int totalHits = topDocs.totalHits;
for(int i=(page-1) * pageSize;i<page*pageSize&&i<totalHits;i++) {
Document document = indexSearcher.doc(scoreDocs[i].doc);
System.out.println(document.get(FIELD_COIN));
}
indexSearcher.close();
indexReader.close();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void createIndex() {
try {
Directory directory = FSDirectory.open(new File(INDEX_PATH));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_35, analyzer);
LogDocMergePolicy mergePolicy = new LogDocMergePolicy();
mergePolicy.setMergeFactor(100);
indexWriterConfig.setMergePolicy(mergePolicy);
IndexWriter indexWriter = new IndexWriter(directory, indexWriterConfig);
for(int i=0;i<123456;i++) {
Document document = new Document();
document.add(new Field(FIELD_COIN, String.valueOf(new Random().nextInt(10)), Field.Store.YES, Field.Index.NOT_ANALYZED));
indexWriter.addDocument(document);
}
indexWriter.forceMerge(1);
indexWriter.commit();
indexWriter.close(true);
} catch(Exception e) {
e.printStackTrace();
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询