package player.kent.chen.temp.lucene.nrts; 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.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; public class MyNearRealTimeSearch { public static void main(String[] args) throws Exception { //创建index writer对象 Directory indexDir = new RAMDirectory(); IndexWriter indexWriter = new IndexWriter(indexDir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED); //为第一个文档建索引,但不commit() String text1 = "I have a dream"; Document doc1 = new Document(); doc1.add(new Field("content", text1, Field.Store.YES, Field.Index.ANALYZED)); indexWriter.addDocument(doc1); //搜一下 IndexSearcher indexSearcher = new IndexSearcher(indexWriter.getReader()); //关键语句,searcher的reader来自上面的writer TopDocs result1 = indexSearcher.search(new TermQuery(new Term("content", "dream")), 1); System.out.println(result1.totalHits); //1 //把第二个doc加入索引 String text2 = " the sons of former slaves and the sons of former slave owners"; Document doc2 = new Document(); doc2.add(new Field("content", text2, Field.Store.YES, Field.Index.ANALYZED)); indexWriter.addDocument(doc2); //再搜一下。 这时要更新一下search对象 IndexReader newReader = indexSearcher.getIndexReader().reopen(); //reader重开,并返回新实例 indexSearcher.getIndexReader().close(); //关闭原来的reader indexSearcher = new IndexSearcher(newReader); //搜 TopDocs result2 = indexSearcher.search(new TermQuery(new Term("content", "slaves")), 1); System.out.println(result2.totalHits); //1 indexWriter.close(); } }