如何有效地确定 Lucene 查询是否至少有一个结果?

How to find out if a Lucene query has at least one result efficiently?

我需要查明我的 BooleanQuery 是否至少有一个匹配文档。我不关心匹配文档的总数——只关心至少有一个匹配。目前我正在使用 IndexSearcher.Search(...)n = 1,但我想知道是否有更有效的方法。

如果我设置 n = 1TotalHits 仍将设置为正确的值(即它可能大于 1),所以我怀疑 Lucene 做了我没有做的额外工作不需要。

有更好的方法吗?

P.S。我正在使用 Lucene .NET 3.0.3。

Lucene 不会搜索每个文档以确定命中数。它搜索索引,索引返回匹配的文档。想想一本书的索引:

Cats . . . . . 5, 8, 9, 10
Dogs . . . . . 5, 6, 11, 12
Horses . . . . 5, 8, 12, 13, 14

如果我正在搜索 "Cats AND Horses",那么告诉我“1 次或多次匹配”与“2 次匹配”所需的工作量并没有显着差异。


至于在充满 "should" 子句的布尔查询中短路,我不知道有任何查询 class 会这样做。如果你有一个像 field:simpleterm field:*slowwildcardquery* 这样的查询,并且不想在简单术语查询上有匹配项时评估大而慢的通配符查询,你应该 运行 它们作为单独的搜索。如果第一个没有 return 任何命中,那么 运行 第二个。