首页 > 解决方案 > Lucene.NET Delete.Documents 对于 BooleanQuery 没有按预期工作

问题描述

当我尝试使用 Occur.Should 通过布尔查询删除文档时,没有任何内容被删除

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();

我预计“字段”值为“A”或“B”的文档将从索引中删除,但是当我从索引中获取文档时,仍然有“A”和“B”,我是否以错误的方式使用它?

标签: c#lucenelucene.net

解决方案


事实证明,我不应该在提交之前调用 Clauses.Clear()。该过程将清除所有布尔子句。删除清除部分,一切正常。

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();

推荐阅读