You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2013/02/12 17:39:51 UTC

svn commit: r1445251 - in /lucene/dev/branches/branch_4x: ./ lucene/ lucene/facet/ lucene/facet/src/java/org/apache/lucene/facet/encoding/ lucene/facet/src/java/org/apache/lucene/facet/search/ lucene/facet/src/test/org/apache/lucene/facet/search/

Author: shaie
Date: Tue Feb 12 16:39:51 2013
New Revision: 1445251

URL: http://svn.apache.org/r1445251
Log:
LUCENE-4769: Add a CountingFacetsAggregator which reads ordinals from a cache

Added:
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CachedOrdsCountingFacetsAggregator.java
      - copied unchanged from r1445234, lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/search/CachedOrdsCountingFacetsAggregator.java
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/IntRollupFacetsAggregator.java
      - copied unchanged from r1445234, lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/search/IntRollupFacetsAggregator.java
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/OrdinalsCache.java
      - copied unchanged from r1445234, lucene/dev/trunk/lucene/facet/src/java/org/apache/lucene/facet/search/OrdinalsCache.java
Modified:
    lucene/dev/branches/branch_4x/   (props changed)
    lucene/dev/branches/branch_4x/lucene/   (props changed)
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_4x/lucene/facet/   (props changed)
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/encoding/IntDecoder.java
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsAggregator.java
    lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/FastCountingFacetsAggregator.java
    lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsAggregatorTest.java

Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1445251&r1=1445250&r2=1445251&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Tue Feb 12 16:39:51 2013
@@ -144,6 +144,11 @@ New Features
   to Lucene42DocValuesConsumer) if you want to make this tradeoff.
   (Adrien Grand, Robert Muir)
 
+* LUCENE-4769: Added OrdinalsCache and CachedOrdsCountingFacetsAggregator
+  which uses the cache to obtain a document's ordinals. This aggregator
+  is faster than others, however consumes much more RAM.
+  (Michael McCandless, Shai Erera)
+  
 API Changes
 
 * LUCENE-4709: FacetResultNode no longer has a residue field. (Shai Erera)

Modified: lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/encoding/IntDecoder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/encoding/IntDecoder.java?rev=1445251&r1=1445250&r2=1445251&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/encoding/IntDecoder.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/encoding/IntDecoder.java Tue Feb 12 16:39:51 2013
@@ -29,7 +29,8 @@ public abstract class IntDecoder {
   
   /**
    * Decodes the values from the buffer into the given {@link IntsRef}. Note
-   * that {@code values.offset} and {@code values.length} are set to 0.
+   * that {@code values.offset} is set to 0, and {@code values.length} is
+   * updated to denote the number of decoded values.
    */
   public abstract void decode(BytesRef buf, IntsRef values);
 

Modified: lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsAggregator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsAggregator.java?rev=1445251&r1=1445250&r2=1445251&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsAggregator.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/CountingFacetsAggregator.java Tue Feb 12 16:39:51 2013
@@ -4,7 +4,6 @@ import java.io.IOException;
 
 import org.apache.lucene.facet.params.CategoryListParams;
 import org.apache.lucene.facet.search.FacetsCollector.MatchingDocs;
-import org.apache.lucene.facet.taxonomy.TaxonomyReader;
 import org.apache.lucene.util.IntsRef;
 
 /*
@@ -33,7 +32,7 @@ import org.apache.lucene.util.IntsRef;
  * 
  * @lucene.experimental
  */
-public class CountingFacetsAggregator implements FacetsAggregator {
+public class CountingFacetsAggregator extends IntRollupFacetsAggregator {
   
   private final IntsRef ordinals = new IntsRef(32);
   
@@ -57,27 +56,4 @@ public class CountingFacetsAggregator im
     }
   }
   
-  private int rollupCounts(int ordinal, int[] children, int[] siblings, int[] counts) {
-    int count = 0;
-    while (ordinal != TaxonomyReader.INVALID_ORDINAL) {
-      int childCount = counts[ordinal];
-      childCount += rollupCounts(children[ordinal], children, siblings, counts);
-      counts[ordinal] = childCount;
-      count += childCount;
-      ordinal = siblings[ordinal];
-    }
-    return count;
-  }
-
-  @Override
-  public void rollupValues(FacetRequest fr, int ordinal, int[] children, int[] siblings, FacetArrays facetArrays) {
-    final int[] counts = facetArrays.getIntArray();
-    counts[ordinal] += rollupCounts(children[ordinal], children, siblings, counts);
-  }
-  
-  @Override
-  public final boolean requiresDocScores() {
-    return false;
-  }
-  
 }

Modified: lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/FastCountingFacetsAggregator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/FastCountingFacetsAggregator.java?rev=1445251&r1=1445250&r2=1445251&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/FastCountingFacetsAggregator.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/search/FastCountingFacetsAggregator.java Tue Feb 12 16:39:51 2013
@@ -7,7 +7,6 @@ import org.apache.lucene.facet.encoding.
 import org.apache.lucene.facet.params.CategoryListParams;
 import org.apache.lucene.facet.params.FacetSearchParams;
 import org.apache.lucene.facet.search.FacetsCollector.MatchingDocs;
-import org.apache.lucene.facet.taxonomy.TaxonomyReader;
 import org.apache.lucene.index.BinaryDocValues;
 import org.apache.lucene.util.BytesRef;
 
@@ -37,7 +36,7 @@ import org.apache.lucene.util.BytesRef;
  * 
  * @lucene.experimental
  */
-public final class FastCountingFacetsAggregator implements FacetsAggregator {
+public final class FastCountingFacetsAggregator extends IntRollupFacetsAggregator {
   
   private final BytesRef buf = new BytesRef(32);
   
@@ -95,27 +94,4 @@ public final class FastCountingFacetsAgg
     }
   }
   
-  private int rollupCounts(int ordinal, int[] children, int[] siblings, int[] counts) {
-    int count = 0;
-    while (ordinal != TaxonomyReader.INVALID_ORDINAL) {
-      int childCount = counts[ordinal];
-      childCount += rollupCounts(children[ordinal], children, siblings, counts);
-      counts[ordinal] = childCount;
-      count += childCount;
-      ordinal = siblings[ordinal];
-    }
-    return count;
-  }
-
-  @Override
-  public final void rollupValues(FacetRequest fr, int ordinal, int[] children, int[] siblings, FacetArrays facetArrays) {
-    final int[] counts = facetArrays.getIntArray();
-    counts[ordinal] += rollupCounts(children[ordinal], children, siblings, counts);
-  }
-
-  @Override
-  public final boolean requiresDocScores() {
-    return false;
-  }
-  
 }

Modified: lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsAggregatorTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsAggregatorTest.java?rev=1445251&r1=1445250&r2=1445251&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsAggregatorTest.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/search/CountingFacetsAggregatorTest.java Tue Feb 12 16:39:51 2013
@@ -270,7 +270,15 @@ public class CountingFacetsAggregatorTes
   }
   
   private FacetsAccumulator randomAccumulator(FacetSearchParams fsp, IndexReader indexReader, TaxonomyReader taxoReader) {
-    final FacetsAggregator aggregator = random().nextBoolean() ? new CountingFacetsAggregator() : new FastCountingFacetsAggregator();
+    final FacetsAggregator aggregator;
+    double val = random().nextDouble();
+    if (val < 0.6) {
+      aggregator = new FastCountingFacetsAggregator(); // it's the default, so give it the highest chance
+    } else if (val < 0.8) {
+      aggregator = new CountingFacetsAggregator();
+    } else {
+      aggregator = new CachedOrdsCountingFacetsAggregator();
+    }
     return new FacetsAccumulator(fsp, indexReader, taxoReader) {
       @Override
       public FacetsAggregator getAggregator() {