1. 程式人生 > >Lucene深入學習(11)Lucene的索引刪除

Lucene深入學習(11)Lucene的索引刪除

摘要: 之前的章節中已經說明了索引的新增,本節將介紹如何將特定的一個或多個文件從索引中刪除。

索引讀取

IndexReader是維護索引重要的工具類,它是一個抽象類,但是卻提供了一個靜態方法來獲取其子類的例項。

IndexReader reader = IndexReader.open(index_path)

索引刪除

在建立索引的過程中,Lucene會為每個加入索引的Document賦予一個ID,這個ID將唯一標示一個文件。

簡單刪除測試


IndexReader reader = IndexReader.open(index_path);
reader.deleteDocument(0
);

程式碼從索引中刪除了ID為0的Document。

恢復刪除測試


IndexReader reader = IndexReader.open(index_path);
reader.undeleteAll();
reader.close();

只要沒有提交,就可以回滾,相當於把刪除的文件從“回收站”中找回。
不過只要呼叫了optimize()方法,那些被刪除的文件就正真的被物理刪除了。

批量刪除測試

使用索引ID 刪除文件,在某些場景下效率比較低,Lucene還提供了一種按Field資訊刪除索引的方式。


IndexReader reader = IndexReader.open(index_path);
Term term = new
Term("type", "car"); reader.deleteDocument(term); reader.close();

這段測試程式碼首先打開了一個IndexReader,並構建了一個Term,然後呼叫deleteDocument方法來批量刪除。
這種刪除索引的方式在正真的開發場景下,最為實用。