Я нашел отличный пример получения подсчета фасетов в базовом запросе. Он сохраняет битовый массив базового запроса для повышения производительности при каждом подсчете фасета.
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).
Я не могу узнать, как сделать bitArray.And (bitArray) с помощью docIdSet. Я посмотрел в отражатель и нашел OpenIdSet, который имеет операции А. Не уверен, что OpenIdSet - это путь, я просто заявляю.
Заранее спасибо!