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