package org.itat.test; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryParser.ParseException; 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.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; public class HelloLucene { /** * 建立索引 * @throws IOException * @throws CorruptIndexException */ public void index() throws CorruptIndexException, IOException { //1. 创建Directory Directory directory = new RAMDirectory();//建立在内存中的 //Directory directory = FSDirectory.open(new File("d:/lucene1/index01")); //2. 创建indexWriter IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)); IndexWriter writer = null; try { writer = new IndexWriter(directory, iwc); //3. 创建document对象 Document doc = null; //4. 为document添加Field File f = new File("D:/lucene"); for(File file : f.listFiles()) { doc = new Document(); doc.add(new Field("content", new FileReader(file))); doc.add(new Field("filename", file.getName(), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("path",file.getAbsolutePath(), Field.Store.YES, Field.Index.NOT_ANALYZED)); //5. 通过IndexWriter添加文档到索引中 writer.addDocument(doc); } } catch (CorruptIndexException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } finally { if(writer != null) { writer.close(); } } } @SuppressWarnings("resource") public void search() throws ParseException { //1. 创建Directory Directory directory; IndexReader reader; try { directory = FSDirectory.open(new File("d:/lucene1/index01")); //2. 创建indexReader reader = IndexReader.open(directory); //3. 根据indexReader 创建IndexSearcher //4. 创建搜索的Query QueryParser parser = new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35)); //创建parser来确定要搜索文件的内容,第二个参数 表示搜索的域 //创建query,表示搜索域为content中包含java的文档 Query query = parser.parse("com"); //5. 根据sea人撤人搜索并且返回TopDocs TopDocs tds = new IndexSearcher(reader).search(query, 100); //6. 根据TopDocs 获取ScoreDOc对象 ScoreDoc[] sds = tds.scoreDocs; for(ScoreDoc sd : sds) { //7. 根据searcher和scoreDoc对象获取具体的Document对象 Document d = new IndexSearcher(reader).doc(sd.doc); //8. 根据Document对象获取需要的值 System.out.println(d.get("filename") + "[" + d.get("path") + "]"); } //9. 关闭reader reader.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
测试类:
package org.itat.test; import java.io.IOException; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.queryParser.ParseException; import org.junit.Test; public class TestLucene { @Test public void testIndex() throws CorruptIndexException, IOException, ParseException { HelloLucene hl = new HelloLucene(); hl.index(); } @Test public void testSearcher() throws ParseException { HelloLucene hl = new HelloLucene(); // hl.index(); hl.search(); } }
时间: 2024-11-04 16:04:10