我找到了一个关于在基本查询中获取构面计数的好例子。它存储基本查询的位数组,以在每次计算一个方面时提高性能。
var genreQuery = new TermQuery(new Term("genre", genre));
var genreQueryFilter = new QueryFilter(genreQuery);
BitArray genreBitArray = genreQueryFilter.Bits(searcher.GetIndexReader());
Console.WriteLine("There are " + GetCardinality(genreBitArray) + " document with the genre " + genre);
// Next perform a regular search and get its BitArray result
Query searchQuery = MultiFieldQueryParser.Parse(term, new[] {"title", "description"}, new[] {BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD}, new StandardAnalyzer());
var searchQueryFilter = new QueryFilter(searchQuery);
BitArray searchBitArray = searchQueryFilter.Bits(searcher.GetIndexReader());
Console.WriteLine("There are " + GetCardinality(searchBitArray) + " document containing the term " + term);
唯一的问题是我使用的是较新版本的 Lucene.NET (2.9) 并且 Filter.Bits 已过时。我们被告知要使用 DocIdSet(而不是 BitArray)。
我不知道如何使用 docIdSet 执行 bitArray.And(bitArray)。我查看了反射器,发现了具有 And 操作的 OpenIdSet。不确定 OpenIdSet 是否是要走的路线,我只是说。
提前致谢!