I have this method that I invoke in my controller that have to delete a specific Document. I read in some articles that the best way to delete a Document is using a IndexWriter. But I can't make it work. This is my code
My Index:
var article1 = new Document();
article1.Add(new Field("Id", "1", Field.Store.YES, Field.Index.ANALYZED));
article1.Add(new Field("Author", "Author", Field.Store.YES, Field.Index.ANALYZED));
article1.Add(new Field("Title", "Title", Field.Store.YES, Field.Index.ANALYZED));
var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
var analyzar = new StandardAnalyzer(Version.LUCENE_29);
var writer = new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
writer.AddDocument(article1);
writer.Optimize();
writer.Commit();
writer.Close();
The method delete:
public void Delete(string id)
{
var directory = FSDirectory.Open(new DirectoryInfo(IndexRoute));
var analyzar = new StandardAnalyzer(Version.LUCENE_29);
var writer = new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
var term = new Term("Id", id);
writer.DeleteDocuments(term);
writer.Optimize();
writer.Commit();
writer.Close();
}
The method in the controller that invoke the "delete" void:
public ActionResult Delete()
{
_carService.Delete("1");
return RedirectToAction("Index", "Home");
}
So I can't find my error,a little help please...
When you build your IndexWriter for the delete method like that:
new IndexWriter(directory, analyzar, true, IndexWriter.MaxFieldLength.LIMITED);
You are specifying true for the create parameter, which overwrites the existing index with an empty one, deleting all your documents.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With