Ho trovato un ottimo esempio sull'acquisizione di conteggi di sfaccettatura su una query di base. Memorizza il bitarray della query di base per migliorare le prestazioni ogni volta che viene contato un facet.Lucene.NET 2.9 e BitArray/DocIdSet
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);
L'unico problema è che sto usando una versione più recente di Lucene.NET (2.9) e Filter.Bits è obsoleto. Ci viene detto di usare DocIdSet invece (piuttosto che BitArray).
Non riesco a scoprire come eseguire il bitArray.And (bitArray) con un docIdSet. Ho guardato in Reflector e ho trovato OpenIdSet che ha le operazioni di AND. Non sono sicuro che OpenIdSet sia la strada da percorrere, lo sto solo affermando.
Grazie in anticipo!
grazie per aver condiviso la risposta, mi ha salvato molte ore di ricerca – Woland