2010-06-01 30 views
8

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!

Trả lời

14

Tìm thấy.

  var productsDISI = new OpenBitSetDISI(productResults.Iterator(), 25000); 
      var termQuery = new TermQuery(new Term("Spec" + expectedFacet.SpecificationId, expectedFacet.SpecificationOptionId.ToString())); 
      var termQueryFilter = new QueryWrapperFilter(termQuery); 
      var termIterator = termQueryFilter.GetDocIdSet(productReader).Iterator(); 
      productsDISI.InPlaceAnd(termIterator); 
      var total = productsDISI.Cardinality(); 

hóa ra cũng nhanh hơn nhiều.

+1

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

Các vấn đề liên quan