這幾天要用Lucene作點東西,因此看了一些文章和Lucene的wiki,進而發現了一些小問題,如今和你們分享。java
至於建立索引和查找索引,如今網上隨便一搜,都有一大堆的結果。如今要說的是刪除索引。數組
在Apache的網站上的FAQ中,推薦用IndexWriter的deleteDocuments來實現刪除符合條件的索引,通過屢次的測試發現,用IndexWriter的deleteDocuments刪除是會把.cfs文件刪除掉(不知道什麼緣由,並且IndexWriter的各類構建方法我都試過了,也許是Lucene的一個bug)。因此我採用IndexReader的deleteDocuments來刪除。代碼以下:ide
public static void main(String[] args) throws IOException { 測試
String indexDir = "e:\\javatest\\index2";
Directory dir = new SimpleFSDirectory(new File(indexDir));
IndexReader reader = IndexReader.open( dir,false);
Term term = new Term("id","4");
int delCnt = reader.deleteDocuments(term);
reader.close();
System.out.println("共刪除索引條數:"+delCnt);
}網站
出現的現象有:索引
一、要刪除的字段的值中所有是英數字的時候,刪除沒有問題。it
二、要刪除的字段的值包含中文時就刪除不成功。io
鑑於有第2種現象,我採用如下思想來解決的:在索引中加入一個所有是英數字的主鍵,若是要刪除包含有中文的字段的條件時,先用包含中文的字段檢索出主鍵數組,而後再根據主鍵一一刪除。class
注:可能有些大大已經用過這個方法或者有刪除中文索引方法了,只是沒有拿出來分享。希望這篇文中能幫助一些人,也能起到拋磚引玉的做用。test