2008-10-13 14 views
7

ich möchte alle die zuvor erstellten Indizes löschen. Ich benutze Lucene.net.Löschen Sie alle Indizes in Lucene.net

Ich habe versucht, die folgenden:

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

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

aber ich Fehler. irgendeine Idee, wie man das macht?

Antwort

16

Der beste Weg, einen Index zu löschen, besteht darin, das Dateisystemverzeichnis zu löschen. Wenn Sie den Index jedoch neu generieren möchten, ist es am einfachsten, einen neuen Indexer mit dem Parameter create als true zu öffnen. Es startet einen neuen Index, der den Inhalt des bestehenden Index löscht.

1

Wie Jokin sagte, war es am einfachsten, alle Dateien innerhalb des Verzeichnisses zu löschen. d. h.

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

Vom Lucene.Net API Doc:

public static IndexReader Open(Directory);

Experte: Gibt eine Lese-/Schreib IndexReader den Index im angegebenen Verzeichnis zu lesen, mit einem benutzerdefinierten IndexDeletionPolicy. HINWEIS: Ab 3.0 wird readOnly IndexReader zurückgegeben. Ruft CorruptIndexException ab, wenn der Index beschädigt ist. Löst IOException aus, wenn ein IO-Fehler auf niedriger Ebene vorliegt.

Ich denke, man

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

versuchen sollte, obwohl der Thread alt ich denke, es ist besser Antwort zu geben .. vielleicht für jemand anderen nützlich sein. Die Methode deleteAll() von IndexWriter kann zum Löschen aller indizierten Dokumente verwendet werden.

Verwandte Themen