2010-06-01 10 views
8

Ich fand ein großartiges Beispiel für das Ergreifen von Facetten zählt auf einer Basisabfrage. Es speichert das Bitarray der Basisabfrage, um die Leistung jedes Mal zu verbessern, wenn die Facette gezählt wird.Lucene.NET 2.9 und BitArray/DocIdSet

Das einzige Problem ist, dass ich eine neuere Version von Lucene.NET (2.9) verwende und Filter.Bits veraltet ist. Wir werden angewiesen, stattdessen DocIdSet zu verwenden (anstatt BitArray).

Ich kann nicht herausfinden, wie BitArray.And (BitArray) mit einem DocIdSet zu tun. Ich schaute in Reflektor und fand OpenIdSet, das And-Operationen hat. Nicht sicher, ob OpenIdSet die Route ist, die ich gehen soll, ich sage nur.

Vielen Dank im Voraus!

Antwort

14

Es gefunden.

  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(); 

entpuppt sich auch als viel schneller.

+1

danke für die gemeinsame Antwort, ersparte mir viele Stunden der Forschung – Woland