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

时间:2017-10-23 08:25:58

标签: c# .net lucene lucene.net

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

如果我设置n = 1TotalHits仍会设置为正确的值(即可能高于1),所以我怀疑Lucene做了额外的工作,我不会#39; t need。

有更好的方法吗?

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

1 个答案:

答案 0 :(得分:1)

Lucene不会搜索每个文档来确定点击次数。它搜索索引,索引返回匹配的文档。想想一本书的索引:

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

如果我正在寻找“猫与马”,那么告诉我“1次或更多次点击”与“2次点击”所需的工作量并没有太大差异。

对于充满“should”子句的布尔查询中的短路,我不知道任何执行此操作的查询类。如果您有field:simpleterm field:*slowwildcardquery*之类的查询,并且如果简单术语查询存在匹配项,则不想评估大的慢速通配符查询,您应该将它们作为单独的搜索运行。如果第一个没有返回任何命中,则运行第二个。