Tôi đã tìm thấy một ví dụ tuyệt vời về lấy số lượng các khía cạnh trên truy vấn cơ sở. Nó lưu trữ bitarray của truy vấn cơ sở để cải thiện hiệu suất mỗi khi một khía cạnh được tính.Lucene.NET 2.9 và 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);
Vấn đề duy nhất là tôi đang sử dụng phiên bản mới hơn của Lucene.NET (2.9) và Filter.Bits đã lỗi thời. Chúng tôi được yêu cầu sử dụng DocIdSet thay vì (thay vì BitArray).
Tôi không thể tìm ra cách thực hiện bitArray.And (bitArray) bằng docIdSet. Tôi nhìn vào phản xạ và tìm thấy OpenIdSet có hoạt động. Không chắc chắn nếu OpenIdSet là con đường để đi, tôi chỉ nói.
Cảm ơn trước!
cảm ơn bạn đã chia sẻ câu trả lời, đã tiết kiệm cho tôi nhiều giờ nghiên cứu – Woland