Lucene深入學習(11)Lucene的索引刪除
阿新 • • 發佈:2019-02-12
摘要: 之前的章節中已經說明了索引的新增,本節將介紹如何將特定的一個或多個文件從索引中刪除。
索引讀取
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方法來批量刪除。
這種刪除索引的方式在正真的開發場景下,最為實用。