Lucene学习笔记(4):Lucene Index 删除、更新

来源:互联网 发布:sql查询例子 编辑:程序博客网 时间:2024/04/30 05:46
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();}}}}


	
				
		
原创粉丝点击