import java.io.File; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriter.MaxFieldLength; import org.apache.lucene.queryParser.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.NIOFSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; public class TestLucen { public static final String path = "E:\\workspaces\\lucene\\index"; public static void main(String[] args) throws Exception { writeIndex(); readIndex("text", "area"); } public static void writeIndex() throws Exception { // 硬盘索引 IndexWriter writer = new IndexWriter( new NIOFSDirectory(new File(path)), new StandardAnalyzer( Version.LUCENE_30), MaxFieldLength.LIMITED); // Ram索引 RAMDirectory ram = new RAMDirectory(); IndexWriter ramwriter = new IndexWriter(ram, new StandardAnalyzer( Version.LUCENE_30), MaxFieldLength.LIMITED); Document doc = new Document(); Document doc1 = new Document(); doc.add(new Field("text", "It is a text area", Store.YES, Index.ANALYZED_NO_NORMS)); doc.add(new Field("info", "It is a Infomation area", Store.YES, Index.ANALYZED_NO_NORMS)); writer.addDocument(doc); doc1.add(new Field("text", "it is another area", Store.YES, Index.ANALYZED)); ramwriter.addDocument(doc1); ramwriter.optimize(); ramwriter.close(); // 将Ram索引合并到硬盘索引上,必须先调用ram的close方法 writer.addIndexes(IndexReader.open(ram)); writer.optimize(); writer.close(); } public static void readIndex(String field, String keyword) throws Exception { IndexSearcher searcher = new IndexSearcher(new NIOFSDirectory(new File( path))); Query query = new QueryParser(Version.LUCENE_30, field, new StandardAnalyzer(Version.LUCENE_30)).parse(keyword); TopDocs docs = searcher.search(query, 10); System.out.println("查找到" + docs.totalHits + "个\n对应的text为:"); ScoreDoc[] doc = docs.scoreDocs; for (ScoreDoc d : doc) { Document docu = searcher.doc(d.doc); System.out.println(docu.get(field)); } } }
执行结果:
查找到2个
对应的text为:
It is a text area
it is another area