lucene小练一__索引(想学点Lucene了)
文件放在F:/lucene/lucenespackage 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.创建DirectoryDirectory directory=FSDirectory.open(new File("f:/lucene/Index01"));//2.创建IndexReaderIndexReader reader=IndexReader.open(directory);//3.根据IndexReader创建IndexSercherIndexSearcher 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搜索并返回TopDocsTopDocs 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.关闭readerreader.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 {@Testpublic void testIndex(){demo d=new demo();d.index();}@Testpublic 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();}}