Search code examples
c#lucenelucene.net

Lucene.NET Delete.Documents not working as expected for BooleanQuery


When I try to delete the documents via boolean query with Occur.Should, nothing got deleted

var query = new BooleanQuery();
query.Add(new TermQuery(new Term("Field", "A")), Occur.Should);
query.Add(new TermQuery(new Term("Field", "B")), Occur.Should);
writer.DeleteDocuments(query);
query.Clauses.Clear();
writer.Commit();

I expected the documents with "Field" value "A" or "B" will be deleted from index, but when I fetch the documents from index, still got "A" and "B" there, did I use it in the wrong way?


Solution

  • Turns out, I should not call Clauses.Clear() before commit. That process will clean all boolean clauses. Delete the clear part, everything works fine.

    var query = new BooleanQuery();
    query.Add(new TermQuery(new Term("Field", "A")), Occur.Should);
    query.Add(new TermQuery(new Term("Field", "B")), Occur.Should);
    writer.DeleteDocuments(query);
    writer.Commit();