删除Lucene.net中的所有索引

时间:2008-10-13 02:02:17

标签: lucene.net

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

答案 0 :(得分:17)

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

答案 1 :(得分:6)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

来自Lucene.Net API Doc

  

public static IndexReader Open(Directory);

     

专家:返回读/写IndexReader,读取给定目录中的索引,并使用自定义IndexDeletionPolicy。注意:从3.0开始,这将返回 readOnly IndexReader。如果索引已损坏,则抛出CorruptIndexException。如果存在低级IO错误,则抛出IOException。

我想你应该试试

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