注:高版本的jar可能编译不过去。这里采用了Lucene1.4.3 ,部分代码参考http://www.java2000.net/p4998
介绍了,rangeQuery、prefixQuery、phraseQuery、wildcardQuery、fuzzyQuery等各种条件查询。
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.Term; import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.PhraseQuery; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RangeQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; /** * 此次测试使用的是Lucene1.4.3 * @author 李晗 * */ public class Test { private static Directory directory = new RAMDirectory(); public static void preIndex() throws Exception { String fileName1 = "./data/searchShow.txt"; String fileName2 = "./data/searchShow2.txt"; String fileName3 = "./data/test.txt"; //将对象写入索引 IndexWriter writer = new IndexWriter(directory, new StandardAnalyzer(), true); //设置DOcument对象的FIled属性 Document doc1 = getDocument(fileName1); Document doc2 = getDocument(fileName2); Document doc3 = getDocument(fileName3); writer.addDocument(doc1); writer.addDocument(doc2); writer.addDocument(doc3); writer.close(); } // 先建立索引才能执行 // termQuery rangeQuery booleanQuery的查询在Searcher类中 public static void rangeQuery() throws Exception { Term startTerm = new Term("lastmodified", "20070620"); Term endTerm = new Term("lastmodified", "20070622"); //RangeQuery RangeQuery RangeQuery query = new RangeQuery(startTerm, endTerm, true); //索引检索 IndexSearcher searcher = new IndexSearcher(directory); Hits hits = searcher.search(query); prtHits(hits); } //前缀查询 public static void prefixQuery() throws Exception { Term term = new Term("fileName", "searchShow.txt"); Term prefixterm = new Term("fileName", "searchShow"); IndexSearcher searcher = new IndexSearcher(directory); Query query = new TermQuery(term); Query prefixQuery = new PrefixQuery(prefixterm); Hits hits = searcher.search(query); Hits prefixHits = searcher.search(prefixQuery); prtHits(hits); System.out.println("----------"); prtHits(prefixHits); } public static void phraseQuery() throws Exception { IndexSearcher searcher = new IndexSearcher(directory); PhraseQuery query = new PhraseQuery(); query.setSlop(2); query.add(new Term("contents", "quick")); query.add(new Term("contents", "fox")); Hits hits = searcher.search(query); prtHits(hits); } public static void wildcardQuery() throws Exception { IndexSearcher searcher = new IndexSearcher(directory); Query query = new WildcardQuery(new Term("contents", "?ild*")); Hits hits = searcher.search(query); prtHits(hits); } public static void fuzzyQuery() throws Exception { IndexSearcher searcher = new IndexSearcher(directory); Term term = new Term("contents", "wuzza"); FuzzyQuery query = new FuzzyQuery(term); Hits hits = searcher.search(query); prtHits(hits); } public static Document getDocument(String fileName) throws Exception { File file = new File(fileName); Document doc = new Document(); doc.add(Field.Keyword("fileName", file.getName())); Date modified = new Date(file.lastModified()); String lastmodified = new SimpleDateFormat("yyyyMMdd").format(modified); doc.add(Field.Keyword("lastmodified", lastmodified)); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer sb = new StringBuffer(); String line = null; while ((line = br.readLine()) != null) { sb.append(line); } br.close(); doc.add(Field.Text("contents", sb.toString())); return doc; } public static void prtHits(Hits hits) throws Exception { for (int i = 0; i < hits.length(); i++) { Document doc = hits.doc(i); System.out.println(doc.get("fileName")); System.out.println(doc.get("lastmodified")); } } public static void main(String[] args) throws Exception { preIndex(); // rangeQuery(); // prefixQuery(); // phraseQuery(); // wildcardQuery(); fuzzyQuery(); } }