2008-10-13 2 views
7

Я хочу удалить все ранее созданных индексов. Я использую Lucene.net.Удалить все индексы в Lucene.net

я попытался следующие:

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

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

, но я получаю сообщение об ошибке. любая идея, как это сделать?

ответ

16

Лучший способ удалить индекс - стереть каталог файловой системы. Однако, если вы не хотите обновлять индекс, самым простым способом является открытие нового индексатора с параметром create как true. Он запустит новый индекс, удалив содержимое существующего.

1

Как сказал Йокин, самым простым было удалить все файлы в каталоге. т.е. .;

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

От Lucene.Net API Doc:

public static IndexReader Open(Directory);

Эксперт: Возвращает чтение/запись IndexReader чтения индекса в данной директории, с пользовательской IndexDeletionPolicy. ПРИМЕЧАНИЕ. Начиная с версии 3.0 это вернет readOnly IndexReader. Выбрасывает CorruptIndexException, если индекс поврежден. Выбрасывает IOException, если существует ошибка низкого уровня IO.

я думаю, вы должны попробовать

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

хотя нить старый я думаю, что лучше дать ответ .. может быть полезным для кого-то другого. deleteAll() метод IndexWriter можно использовать для удаления всех проиндексированных документов.

Смежные вопросы