packagecom.shyroke.test;importjava.io.IOException;importjava.nio.file.Paths;importorg.apache.lucene.analysis.Analyzer;importorg.apache.lucene.analysis.standard.StandardAnalyzer;importorg.apache.lucene.document.Document;importorg.apache.lucene.document.Field;importorg.apache.lucene.document.IntField;importorg.apache.lucene.document.StringField;importorg.apache.lucene.index.DirectoryReader;importorg.apache.lucene.index.IndexReader;importorg.apache.lucene.index.IndexWriter;importorg.apache.lucene.index.IndexWriterConfig;importorg.apache.lucene.index.Term;importorg.apache.lucene.search.BooleanClause;importorg.apache.lucene.search.BooleanQuery;importorg.apache.lucene.search.IndexSearcher;importorg.apache.lucene.search.NumericRangeQuery;importorg.apache.lucene.search.PrefixQuery;importorg.apache.lucene.search.ScoreDoc;importorg.apache.lucene.search.TopDocs;importorg.apache.lucene.store.Directory;importorg.apache.lucene.store.FSDirectory;importorg.junit.Before;importorg.junit.Test;public classIndexTest {private Integer ids[]={1,2,3};private String citys[]={"aingdao","banjing","changhai"};private String descs[]={"Qingdao is a beautiful city.","Nanjing is a city of culture.","Shanghai is a bustling city."};privateIndexReader reader;privateIndexSearcher searcher;private String indexDir="E:\\lucene5\\index";
@Beforepublic void setUp() throwsIOException {
IndexWriter indexWriter=getIndexWiter();for (int i = 0; i < ids.length; i++) {
Document document= newDocument();
document.add(new IntField("id", ids[i], Field.Store.YES));
document.add(new StringField("city", citys[i], Field.Store.YES));
document.add(new StringField("desc", descs[i], Field.Store.NO));
indexWriter.addDocument(document);
}
indexWriter.close();
Directory dir=FSDirectory.open(Paths.get(indexDir));
reader=DirectoryReader.open(dir);
searcher=newIndexSearcher(reader);
}/*** 实例化IndexWiter
*
*@return*@throwsIOException*/
private IndexWriter getIndexWiter() throwsIOException {
Directory dir=FSDirectory.open(Paths.get(indexDir));
Analyzer analyzer= newStandardAnalyzer();
IndexWriterConfig conf= newIndexWriterConfig(analyzer);
IndexWriter indexWriter= newIndexWriter(dir, conf);returnindexWriter;
}/*** 指定数字范围,其中id必须是整型的,如:document.add(new IntField("id", ids[i], Field.Store.YES));
* newIntRange方法第二、三个参数是查询的起点值和终点值,即区间,最后两个参数是指是否包含起点值和终点值。
*@throwsException*/@Testpublic void testNumericRangeQuery()throwsException{
NumericRangeQuery query=NumericRangeQuery.newIntRange("id", 1, 2, true, true);
TopDocs hits=searcher.search(query, 10);for(ScoreDoc scoreDoc:hits.scoreDocs){
Document doc=searcher.doc(scoreDoc.doc);
System.out.println(doc.get("id"));
System.out.println(doc.get("city"));
System.out.println(doc.get("desc"));
System.out.println("---------------------");
}
}}