7

我想删除所有以前创建的索引。我正在使用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

4 回答 4

19

删除索引的最佳方法是擦除文件系统目录。但是,如果您不想重新生成索引,最简单的方法是打开一个新的 indexwriter,并将 create 参数设置为 true。它将启动一个新索引,删除现有索引的内容。

于 2008-10-23T13:55:59.007 回答
8

虽然线程很旧,但我认为最好给出答案..可能对其他人有用。IndexWriter 的 deleteAll() 方法可用于删除所有索引的文档。

于 2012-11-22T09:13:45.227 回答
1

正如 Jokin 所说,最简单的方法是删除目录中的所有文件。IE;

DirectoryInfo directoryInfo = new DirectoryInfo(@"IndexLocation");
Parallel.ForEach(directoryInfo.GetFiles(), file => {
            file.Delete();
        });
于 2010-07-14T00:11:32.843 回答
1

来自Lucene.Net API 文档

public static IndexReader Open(Directory);

Expert:返回一个读/写 IndexReader 读取给定目录中的索引,并带有自定义 IndexDeletionPolicy。注意:从 3.0 开始,这将返回一个只读的IndexReader。如果索引损坏,则引发 CorruptIndexException。如果存在低级 IO 错误,则引发 IOException。

我想你应该试试

IndexReader rdr = IndexReader.Open(_directory, true);
于 2010-12-15T10:44:23.007 回答