8
我发现了一个很好的例子,在基本查询上获取方面计数。它存储基本查询的比特数,以在每一个方面被计数时提高性能。Lucene.NET 2.9和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);
唯一的问题是,我使用的是更新版本的Lucene.NET(2.9)和Filter.Bits已过时。我们被告知要使用DocIdSet(而不是BitArray)。
我找不到如何用docIdSet做bitArray.And(bitArray)。我看着反射器,发现有OpenIdSet和操作。不知道是否OpenIdSet是要走的路线,我只是说。
在此先感谢!
感谢您分享答案,为我节省了许多小时的研究 – Woland 2013-11-16 06:02:24