我需要知道我的BooleanQuery是否至少有一个匹配的文档。我不关心匹配文档的总数 - 只有至少有一个匹配。目前我正在IndexSearcher.Search(...)
使用n = 1
,但我想知道是否有更有效的方式。
如果我设置n = 1
,TotalHits
仍会设置为正确的值(即可能高于1),所以我怀疑Lucene做了额外的工作,我不会#39; t need。
有更好的方法吗?
P.S。我正在使用Lucene .NET 3.0.3。
答案 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*
之类的查询,并且如果简单术语查询存在匹配项,则不想评估大的慢速通配符查询,您应该将它们作为单独的搜索运行。如果第一个没有返回任何命中,则运行第二个。