我需要一个关于如何使用 BooleanQuery(或另一种更有效的方式)编写从 Lucene 索引中删除文档的高效查询的建议 - 查询应该将多个术语与 Guid 值结合起来(通过“Guid”字段删除文档)以及通过“版本”字段..
索引可能包含在“Guid”字段中具有相同值但在“Version”字段中具有不同值的文档。
以下是我的功能:
private void RemoveFromIndex(string[] guids, IndexWriter writer)
{
var terms = guids.Select(guid => new Term("Guid", guid)).ToArray();
if (!isGlobalIndex)
{
writer.DeleteDocuments(terms); //This is working perfectly
}
else
{
//Delete items but only of the corresponding version
BooleanQuery bQ = new BooleanQuery();
if (!string.IsNullOrEmpty(repository.versionName))
{
bQ.Add(new TermQuery(new Term("Version", repository.versionName)), Occur.MUST);
}
//Is there a more efficient way of doing it?
foreach (var term in terms) {
bQ.Add(new TermQuery(term), Occur.SHOULD);
}
writer.DeleteDocuments(bQ);
}
}