2008-10-13 33 views
7

tôi muốn xóa tất cả các chỉ mục đã tạo trước đó. tôi đang sử dụng Lucene.net.Xóa tất cả các chỉ mục trong Lucene.net

tôi đã cố gắng như sau:

Term term = new Term(); //empty coz i want to delete all the indices 
IndexReader rdr = IndexReader.Open(_directory); 

rdr.DeleteDocuments(term); 
rdr.Close(); 

nhưng tôi nhận được lỗi. bất kỳ ý tưởng làm thế nào để đi về nó?

Trả lời

16

Cách tốt nhất để xóa chỉ mục là xóa thư mục hệ thống tệp. Tuy nhiên, nếu bạn không muốn tạo lại chỉ mục, cách dễ nhất là mở một trình viết chỉ mục mới với tham số create là true. Nó sẽ bắt đầu một chỉ mục mới xóa nội dung của hiện tại.

1

Như Jokin đã nói, cách dễ nhất là xóa tất cả các tệp trong thư mục. I E.;

DirectoryInfo directoryInfo = new DirectoryInfo(@"IndexLocation"); 
Parallel.ForEach(directoryInfo.GetFiles(), file => { 
      file.Delete(); 
     }); 
0

Từ Lucene.Net API Doc:

public static IndexReader Open(Directory);

Expert: Trả về một đọc/viết IndexReader đọc chỉ số trong Danh bạ nhất định, với một IndexDeletionPolicy tùy chỉnh. LƯU Ý: Bắt đầu từ 3.0, điều này sẽ trả về một chỉ số readOnly IndexReader. Ném CorruptIndexException nếu chỉ mục bị hỏng. Ném IOException nếu có lỗi IO cấp thấp.

tôi đoán bạn nên thử

IndexReader rdr = IndexReader.Open(_directory, true); 
6

mặc dù chủ đề là cũ tôi nghĩ rằng nó tốt hơn để cung cấp cho câu trả lời .. có thể có ích cho người khác. phương thức deleteAll() của IndexWriter có thể được sử dụng để xóa tất cả các tài liệu được lập chỉ mục.

Các vấn đề liên quan