Удалить все индексы в Lucene.net - PullRequest
7 голосов
/ 13 октября 2008

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

Я попробовал следующее:

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

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

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

Ответы [ 4 ]

17 голосов
/ 23 октября 2008

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

6 голосов
/ 22 ноября 2012

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

1 голос
/ 14 июля 2010

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

DirectoryInfo directoryInfo = new DirectoryInfo(@"IndexLocation");
Parallel.ForEach(directoryInfo.GetFiles(), file => {
            file.Delete();
        });
0 голосов
/ 15 декабря 2010

Из Документа API Lucene.Net :

public static IndexReader Open(Directory);

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

Полагаю, вам стоит попробовать

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