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

   上一篇文章初識Lucene 4.5.0--(一)已經介紹瞭如何創建索引與檢索索引。接下來就是刪除與更新啦~

 

一、刪除索引。

    原本3.x版本時 IndexWriter 與 IndexReader 都是有刪除方法的,讓我們先來看看lucene 3.6 api文檔中的IndexReader的描述:wKiom1N6BafgqrcvAAEn9p0p5G8556.jpg

    

    從4.0開始已經被刪除了,所以現在只能用IndexWriter中的方法來進行刪除。有哪些方法呢?繼續看文檔(lucene 4.5 api):

wKiom1N6CAuTwTqnAAHH8XsfnOk069.jpg

    除了上面的六個外還有一個方法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博文。文中若有不準確或不正確之處還望指正,一起交流一起進步!菜鳥的天空,只要努力,越飛越高!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章