lucene小练一_索引(想学点Lucene了)
lucene小练一__索引(想学点Lucene了)
文件放在F:/lucene/lucenes package org.lucene; 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.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.util.Version; public class demo { /* * 创建索引 */ IndexWriter writer =null; public void index() { try { //创建directory Directory directory=FSDirectory.open(new File("f:/lucene/Index01")); // Directory directory=new RAMDirectory();//建立在内存中 //创建IndexWriter IndexWriterConfig iwc=new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)); writer=new IndexWriter(directory, iwc); //创建document对象 Document doc=null; //为document添加field File f=new File("f:/lucene/lucenes"); 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)); //通过IndexWriter将document添加到索引中 writer.addDocument(doc); } }catch (CorruptIndexException e) { e.printStackTrace(); // TODO: handle exception }catch (LockObtainFailedException e) { e.printStackTrace(); // TODO: handle exception }catch (IOException e) { e.printStackTrace(); // TODO: handle exception }finally{ try { if(writer!=null) writer.close(); }catch (CorruptIndexException e2) { e2.printStackTrace(); // TODO: handle exception }catch (IOException e2) { e2.printStackTrace(); // TODO: handle exception } } } /* * 创建索引 */ public void serch() { try { //1.创建Directory Directory directory=FSDirectory.open(new File("f:/lucene/Index01")); //2.创建IndexReader IndexReader reader=IndexReader.open(directory); //3.根据IndexReader创建IndexSercher IndexSearcher sercher=new IndexSearcher(reader); //4.创建搜索的Quary //创建parse来确定搜索文件的内容,第二个参数是搜索的域 QueryParser parser=new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35)); //创建quary,表示搜索域为content包含name的内容 Query quary=parser.parse("ask"); //5.根据色弱sercher搜索并返回TopDocs TopDocs tds=sercher.search(quary, 10);//10表示显示10条搜索结果 //6.根据TopDocs获取ScoreDoc对象 ScoreDoc[] sds=tds.scoreDocs; for (ScoreDoc sd:sds) { //7.根据sercher对象和Scoredoc对象获取Document对象 Document d=sercher.doc(sd.doc); //8.根据Document对象获取需要的值 System.out.println(d.get("filename")+"["+d.get("path")+"]"); } //9.关闭reader reader.close(); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } } } 测试类 package org.lucene; import java.io.File; import java.io.IOException; import org.apache.lucene.index.IndexReader; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.junit.*; public class TestLucene { @Test public void testIndex() { demo d=new demo(); d.index(); } @Test public void testSercher() { demo d=new demo(); d.serch(); } /*public void check() throws IOException{ //检查索引是否被正确建立(打印索引) Directory directory = FSDirectory.open(new File("f:/lucene/Index01/"));//创建directory,其储存方式为在 IndexReader reader = IndexReader.open(directory); for(int i = 0;i<reader.numDocs();i++){ System.out.println(reader.document(i)); } reader.close(); }*/ public static void main(String[] args) { new TestLucene().testIndex(); new TestLucene().testSercher(); } }