码迷,mamicode.com
首页 > 其他好文 > 详细

初识Lucene 4.5.0 全文搜索--(二)

时间:2014-05-21 01:10:59      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:lucene   lucene删除索引   lucene更新索引   

   上一篇文章初识Lucene 4.5.0--(一)已经介绍了如何创建索引与检索索引。接下来就是删除与更新啦~

 

一、删除索引。

    原本3.x版本时 IndexWriter 与 IndexReader 都是有删除方法的,让我们先来看看lucene 3.6 api文档中的IndexReader的描述:bubuko.com,布布扣

    

    从4.0开始已经被删除了,所以现在只能用IndexWriter中的方法来进行删除。有哪些方法呢?继续看文档(lucene 4.5 api):

bubuko.com,布布扣

    除了上面的六个外还有一个方法tryDeleteDocument(IndexReader reader,int docID),但这个方法是有限制的( NOTE: this method can only delete documents visible to the currently open NRT reader. If you need to delete documents indexed after opening the NRT reader you must use the other deleteDocument methods.)我们最常用的就是deleteDocuments(),不同的参数方法被重载了四次。我以deleteDocuments(Term term)为例做个Demo演示:

/**
  * 删除索引
  * @param id
  */
 public void delete(String id){
  IndexWriter indexWriter = IndexUtil.getIndexWriter();
  //Term 为最小的单元相当于是对应着field的字段
  Term term = new Term("id",id);
  try {
   //参数可以使一个选项,也可以是个query或者term(精确查找值)
   indexWriter.deleteDocuments(term);
   indexWriter.commit();  
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(null!=indexWriter){
    try {
     indexWriter.close();
    } catch (IOException e) {
     e.printStackTrace();
    }         
   }
  }
 }

    嗯~这样就能准确的删除掉你所指定要删的索引文件了。这里又出现了不同之处,之前版本删除了的索引并不是真的被删除,而是把索引文件存入 .del文件中(像我们windows一样把文件存入垃圾箱)。然后还可以通过undeleteAll()方法来进行恢复,但是4.0版本后这个方法也被移除了,并且没有新的方法可替代。

 

二、更新索引

/**
  * 更新(lucene提供的并不是真实的更新方法,实际是先删除后再添加)
  * @param lb
  * @return
  */
 public boolean update(LuceneBeans lb){
  boolean result = false;
  IndexWriter indexWriter = IndexUtil.getIndexWriter();
  try {
   Term term = new Term("id",lb.getId());
   Document doc = new Document();
   doc.add(new StringField("id",lb.getId(),Store.YES));
   doc.add(new TextField("title",lb.getTitle(),Store.YES));
   doc.add(new TextField("introduce",lb.getIntroduce(),Store.YES));
   doc.add(new StringField("addtime",lb.getAddtime(),Store.YES));
   doc.add(new StringField("category",lb.getCategory(),Store.YES));
   //参数一需要删除的索引字段、参数二将要更新的新数据
   indexWriter.updateDocument(term, doc);
   indexWriter.commit();  
   result=true;
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   if(null!=indexWriter){
    try {
     indexWriter.close();
    } catch (IOException e) {
     e.printStackTrace();
    }         
   }
  }
  return result;
 }

    更新操作没什么改变,同样也是传入不同参数重载方法实现更新操作。

 

    结语:lucene 4.5的基本操作就先介绍到这里,后续还会再更新更多的lucene博文。文中若有不准确或不正确之处还望指正,一起交流一起进步!菜鸟的天空,只要努力,越飞越高!

本文出自 “学而思” 博客,请务必保留此出处http://linhongyu.blog.51cto.com/6373370/1413932

初识Lucene 4.5.0 全文搜索--(二),布布扣,bubuko.com

初识Lucene 4.5.0 全文搜索--(二)

标签:lucene   lucene删除索引   lucene更新索引   

原文地址:http://linhongyu.blog.51cto.com/6373370/1413932

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!