public class LuceneIndex {private String []ids={"1","2","3","4","5"};private String []emails={"1@qq.com","2@qq.com","3@sina.com","4@163.com","5@163.com"};private String []contents={"hello lucene","hello java lucene","hello webservice","hello jbpm","hello work start"}; private String []fromnames={"jack","weihua","zhizhi","jhon","luck"}; private Directory directory=null; public LuceneIndex(){ try {directory=FSDirectory.open(new File("c:/lucene/luceneindex"));} catch (IOException e) {e.printStackTrace();} } public void index(){ IndexWriter iw=null; Document doc=null; try { doc=new Document(); iw=new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35))); for(int i=0;i<ids.length;i++){ doc.add(new Field("id", ids[i], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS)); doc.add(new Field("email", emails[i],Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("content",contents[i] , Field.Store.NO, Field.Index.ANALYZED)); doc.add(new Field("fromname", fromnames[i], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS)); iw.addDocument(doc); }} catch (Exception e) {e.printStackTrace();}finally{ if(iw!=null)try {iw.close();} catch (IOException e) {e.printStackTrace();}} } public void search(){ IndexReader ir=null; try {ir=IndexReader.open(directory);System.out.println("MaxDocNum : "+ir.maxDoc());System.out.println("DocsNume : "+ir.numDocs());System.out.println("deleteNum : "+ir.numDeletedDocs());IndexSearcher search=new IndexSearcher(ir);QueryParser parser=new QueryParser(Version.LUCENE_35, "content", new StandardAnalyzer(Version.LUCENE_35));Query query=parser.parse("hello");TopDocs docs=search.search(query, 10);ScoreDoc[] sds=docs.scoreDocs;for(ScoreDoc sd:sds){Document doc=search.doc(sd.doc);//System.out.println(sd.doc);//System.out.println(doc.get("id")+"----"+doc.get("email")); }} catch (Exception e) {e.printStackTrace();} finally{ try {ir.close();} catch (IOException e) {e.printStackTrace();} } } public void deleteAll(){ IndexWriter iw=null;try {iw = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));iw.deleteAll();//清空所有索引iw.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} } public void deleteById(){ IndexWriter iw=null; try {iw=new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));/** * 删除指定id的文档 *///参数是一个选项,可以是一个Query,也可以是一个term,term是一个精确查找的值//此时删除的文档并不会被完全删除,而是存储在一个回收站中的,可以恢复iw.deleteDocuments(new Term("id","2"));iw.close();} catch (Exception e) {e.printStackTrace();} } public void recoverDelete(){ /** * 恢复回收站的内容 */ try {IndexReader ir=IndexReader.open(directory,false);ir.undeleteAll();ir.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} } public void update(){ /** * 更新索引操作是先删除原有的索引,然后再进行添加 */ IndexWriter iw=null; try { Document doc=new Document(); doc.add(new Field("id", "11", Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS)); doc.add(new Field("email", emails[1],Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("content",contents[1] , Field.Store.NO, Field.Index.ANALYZED)); doc.add(new Field("fromname", fromnames[1], Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));iw=new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)));iw.updateDocument(new Term("id","5"), doc);iw.close();} catch (Exception e) {e.printStackTrace();} } public void forceDelete() { /** * 清空回收站 */IndexWriter writer = null;try {writer = new IndexWriter(directory,new IndexWriterConfig(Version.LUCENE_35,new StandardAnalyzer(Version.LUCENE_35)));writer.forceMergeDeletes();} catch (CorruptIndexException e) {e.printStackTrace();} catch (LockObtainFailedException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if(writer!=null) writer.close();} catch (CorruptIndexException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}