summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/search/aggregations/metrics
diff options
context:
space:
mode:
authorTanguy Leroux <tlrx.dev@gmail.com>2017-04-19 10:12:11 +0200
committerTanguy Leroux <tlrx.dev@gmail.com>2017-04-19 10:12:11 +0200
commit5717ac3cc67fbda09cf54828e14e463c3fe07566 (patch)
tree1a30532ae81fcec09ca9d31ba5ce62b103e8d46c /core/src/main/java/org/elasticsearch/search/aggregations/metrics
parent210e101f6d7677e103b24beb33726a8ed8672c5f (diff)
parent8758c541b35bda1a6494ba703b450517027d5e9f (diff)
Merge remote-tracking branch 'origin/master' into feature/client_aggs_parsing
# Conflicts: # core/src/main/java/org/elasticsearch/search/DocValueFormat.java # core/src/test/java/org/elasticsearch/search/aggregations/InternalAggregationTestCase.java # core/src/test/java/org/elasticsearch/search/aggregations/metrics/InternalMaxTests.java # core/src/test/java/org/elasticsearch/search/aggregations/metrics/avg/InternalAvgTests.java # core/src/test/java/org/elasticsearch/search/aggregations/metrics/min/InternalMinTests.java
Diffstat (limited to 'core/src/main/java/org/elasticsearch/search/aggregations/metrics')
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java15
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregator.java72
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java67
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java23
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java18
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java10
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java10
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/AbstractHDRPercentilesAggregator.java9
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/AbstractTDigestPercentilesAggregator.java9
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java29
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java35
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java13
-rw-r--r--core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java5
13 files changed, 171 insertions, 144 deletions
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java
index eb75bae268..0decfa0557 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/avg/AvgAggregator.java
@@ -77,14 +77,15 @@ public class AvgAggregator extends NumericMetricsAggregator.SingleValue {
counts = bigArrays.grow(counts, bucket + 1);
sums = bigArrays.grow(sums, bucket + 1);
- values.setDocument(doc);
- final int valueCount = values.count();
- counts.increment(bucket, valueCount);
- double sum = 0;
- for (int i = 0; i < valueCount; i++) {
- sum += values.valueAt(i);
+ if (values.advanceExact(doc)) {
+ final int valueCount = values.docValueCount();
+ counts.increment(bucket, valueCount);
+ double sum = 0;
+ for (int i = 0; i < valueCount; i++) {
+ sum += values.nextValue();
+ }
+ sums.increment(bucket, sum);
}
- sums.increment(bucket, sum);
}
};
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregator.java
index 7d5db460ae..7a8483b1b2 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/cardinality/CardinalityAggregator.java
@@ -22,8 +22,8 @@ package org.elasticsearch.search.aggregations.metrics.cardinality;
import com.carrotsearch.hppc.BitMixer;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.RandomAccessOrds;
import org.apache.lucene.index.SortedNumericDocValues;
+import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
@@ -88,7 +88,7 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
if (valuesSource instanceof ValuesSource.Bytes.WithOrdinals) {
ValuesSource.Bytes.WithOrdinals source = (ValuesSource.Bytes.WithOrdinals) valuesSource;
- final RandomAccessOrds ordinalValues = source.ordinalsValues(ctx);
+ final SortedSetDocValues ordinalValues = source.ordinalsValues(ctx);
final long maxOrd = ordinalValues.getValueCount();
if (maxOrd == 0) {
return new EmptyCollector();
@@ -114,7 +114,7 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
return collector;
}
- private void postCollectLastCollector() {
+ private void postCollectLastCollector() throws IOException {
if (collector != null) {
try {
collector.postCollect();
@@ -126,7 +126,7 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- protected void doPostCollection() {
+ protected void doPostCollection() throws IOException {
postCollectLastCollector();
}
@@ -159,7 +159,7 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
private abstract static class Collector extends LeafBucketCollector implements Releasable {
- public abstract void postCollect();
+ public abstract void postCollect() throws IOException;
}
@@ -192,11 +192,12 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- public void collect(int doc, long bucketOrd) {
- hashes.setDocument(doc);
- final int valueCount = hashes.count();
- for (int i = 0; i < valueCount; ++i) {
- counts.collect(bucketOrd, hashes.valueAt(i));
+ public void collect(int doc, long bucketOrd) throws IOException {
+ if (hashes.advanceExact(doc)) {
+ final int valueCount = hashes.count();
+ for (int i = 0; i < valueCount; ++i) {
+ counts.collect(bucketOrd, hashes.nextValue());
+ }
}
}
@@ -224,12 +225,13 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
private final BigArrays bigArrays;
- private final RandomAccessOrds values;
+ private final SortedSetDocValues values;
private final int maxOrd;
private final HyperLogLogPlusPlus counts;
private ObjectArray<FixedBitSet> visitedOrds;
- OrdinalsCollector(HyperLogLogPlusPlus counts, RandomAccessOrds values, BigArrays bigArrays) {
+ OrdinalsCollector(HyperLogLogPlusPlus counts, SortedSetDocValues values,
+ BigArrays bigArrays) {
if (values.getValueCount() > Integer.MAX_VALUE) {
throw new IllegalArgumentException();
}
@@ -241,22 +243,22 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- public void collect(int doc, long bucketOrd) {
+ public void collect(int doc, long bucketOrd) throws IOException {
visitedOrds = bigArrays.grow(visitedOrds, bucketOrd + 1);
FixedBitSet bits = visitedOrds.get(bucketOrd);
if (bits == null) {
bits = new FixedBitSet(maxOrd);
visitedOrds.set(bucketOrd, bits);
}
- values.setDocument(doc);
- final int valueCount = values.cardinality();
- for (int i = 0; i < valueCount; ++i) {
- bits.set((int) values.ordAt(i));
+ if (values.advanceExact(doc)) {
+ for (long ord = values.nextOrd(); ord != SortedSetDocValues.NO_MORE_ORDS; ord = values.nextOrd()) {
+ bits.set((int) ord);
+ }
}
}
@Override
- public void postCollect() {
+ public void postCollect() throws IOException {
final FixedBitSet allVisitedOrds = new FixedBitSet(maxOrd);
for (long bucket = visitedOrds.size() - 1; bucket >= 0; --bucket) {
final FixedBitSet bits = visitedOrds.get(bucket);
@@ -296,11 +298,11 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
*/
abstract static class MurmurHash3Values {
- public abstract void setDocument(int docId);
+ public abstract boolean advanceExact(int docId) throws IOException;
public abstract int count();
- public abstract long valueAt(int index);
+ public abstract long nextValue() throws IOException;
/**
* Return a {@link MurmurHash3Values} instance that computes hashes on the fly for each double value.
@@ -332,18 +334,18 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- public void setDocument(int docId) {
- values.setDocument(docId);
+ public boolean advanceExact(int docId) throws IOException {
+ return values.advanceExact(docId);
}
@Override
public int count() {
- return values.count();
+ return values.docValueCount();
}
@Override
- public long valueAt(int index) {
- return BitMixer.mix64(values.valueAt(index));
+ public long nextValue() throws IOException {
+ return BitMixer.mix64(values.nextValue());
}
}
@@ -356,18 +358,18 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- public void setDocument(int docId) {
- values.setDocument(docId);
+ public boolean advanceExact(int docId) throws IOException {
+ return values.advanceExact(docId);
}
@Override
public int count() {
- return values.count();
+ return values.docValueCount();
}
@Override
- public long valueAt(int index) {
- return BitMixer.mix64(java.lang.Double.doubleToLongBits(values.valueAt(index)));
+ public long nextValue() throws IOException {
+ return BitMixer.mix64(java.lang.Double.doubleToLongBits(values.nextValue()));
}
}
@@ -382,18 +384,18 @@ public class CardinalityAggregator extends NumericMetricsAggregator.SingleValue
}
@Override
- public void setDocument(int docId) {
- values.setDocument(docId);
+ public boolean advanceExact(int docId) throws IOException {
+ return values.advanceExact(docId);
}
@Override
public int count() {
- return values.count();
+ return values.docValueCount();
}
@Override
- public long valueAt(int index) {
- final BytesRef bytes = values.valueAt(index);
+ public long nextValue() throws IOException {
+ final BytesRef bytes = values.nextValue();
org.elasticsearch.common.hash.MurmurHash3.hash128(bytes.bytes, bytes.offset, bytes.length, 0, hash);
return hash.h1;
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java
index 2083ea570d..5c0cb4ba60 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geobounds/GeoBoundsAggregator.java
@@ -102,41 +102,42 @@ public final class GeoBoundsAggregator extends MetricsAggregator {
negRights.fill(from, negRights.size(), Double.NEGATIVE_INFINITY);
}
- values.setDocument(doc);
- final int valuesCount = values.count();
+ if (values.advanceExact(doc)) {
+ final int valuesCount = values.docValueCount();
- for (int i = 0; i < valuesCount; ++i) {
- GeoPoint value = values.valueAt(i);
- double top = tops.get(bucket);
- if (value.lat() > top) {
- top = value.lat();
+ for (int i = 0; i < valuesCount; ++i) {
+ GeoPoint value = values.nextValue();
+ double top = tops.get(bucket);
+ if (value.lat() > top) {
+ top = value.lat();
+ }
+ double bottom = bottoms.get(bucket);
+ if (value.lat() < bottom) {
+ bottom = value.lat();
+ }
+ double posLeft = posLefts.get(bucket);
+ if (value.lon() >= 0 && value.lon() < posLeft) {
+ posLeft = value.lon();
+ }
+ double posRight = posRights.get(bucket);
+ if (value.lon() >= 0 && value.lon() > posRight) {
+ posRight = value.lon();
+ }
+ double negLeft = negLefts.get(bucket);
+ if (value.lon() < 0 && value.lon() < negLeft) {
+ negLeft = value.lon();
+ }
+ double negRight = negRights.get(bucket);
+ if (value.lon() < 0 && value.lon() > negRight) {
+ negRight = value.lon();
+ }
+ tops.set(bucket, top);
+ bottoms.set(bucket, bottom);
+ posLefts.set(bucket, posLeft);
+ posRights.set(bucket, posRight);
+ negLefts.set(bucket, negLeft);
+ negRights.set(bucket, negRight);
}
- double bottom = bottoms.get(bucket);
- if (value.lat() < bottom) {
- bottom = value.lat();
- }
- double posLeft = posLefts.get(bucket);
- if (value.lon() >= 0 && value.lon() < posLeft) {
- posLeft = value.lon();
- }
- double posRight = posRights.get(bucket);
- if (value.lon() >= 0 && value.lon() > posRight) {
- posRight = value.lon();
- }
- double negLeft = negLefts.get(bucket);
- if (value.lon() < 0 && value.lon() < negLeft) {
- negLeft = value.lon();
- }
- double negRight = negRights.get(bucket);
- if (value.lon() < 0 && value.lon() > negRight) {
- negRight = value.lon();
- }
- tops.set(bucket, top);
- bottoms.set(bucket, bottom);
- posLefts.set(bucket, posLeft);
- posRights.set(bucket, posRight);
- negLefts.set(bucket, negLeft);
- negRights.set(bucket, negRight);
}
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
index 4b23d042d5..795524e5a0 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/GeoCentroidAggregator.java
@@ -20,7 +20,6 @@
package org.elasticsearch.search.aggregations.metrics.geocentroid;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.spatial.geopoint.document.GeoPointField;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.lease.Releasables;
import org.elasticsearch.common.util.BigArrays;
@@ -72,29 +71,30 @@ final class GeoCentroidAggregator extends MetricsAggregator {
centroids = bigArrays.grow(centroids, bucket + 1);
counts = bigArrays.grow(counts, bucket + 1);
- values.setDocument(doc);
- final int valueCount = values.count();
- if (valueCount > 0) {
+ if (values.advanceExact(doc)) {
+ final int valueCount = values.docValueCount();
double[] pt = new double[2];
// get the previously accumulated number of counts
long prevCounts = counts.get(bucket);
// increment by the number of points for this document
counts.increment(bucket, valueCount);
- // get the previous GeoPoint if a moving avg was computed
+ // get the previous GeoPoint if a moving avg was
+ // computed
if (prevCounts > 0) {
final long mortonCode = centroids.get(bucket);
- pt[0] = GeoPointField.decodeLongitude(mortonCode);
- pt[1] = GeoPointField.decodeLatitude(mortonCode);
+ pt[0] = InternalGeoCentroid.decodeLongitude(mortonCode);
+ pt[1] = InternalGeoCentroid.decodeLatitude(mortonCode);
}
// update the moving average
for (int i = 0; i < valueCount; ++i) {
- GeoPoint value = values.valueAt(i);
+ GeoPoint value = values.nextValue();
pt[0] = pt[0] + (value.getLon() - pt[0]) / ++prevCounts;
pt[1] = pt[1] + (value.getLat() - pt[1]) / prevCounts;
}
- // TODO: we do not need to interleave the lat and lon bits here
+ // TODO: we do not need to interleave the lat and lon
+ // bits here
// should we just store them contiguously?
- centroids.set(bucket, GeoPointField.encodeLatLon(pt[1], pt[0]));
+ centroids.set(bucket, InternalGeoCentroid.encodeLatLon(pt[1], pt[0]));
}
}
};
@@ -108,7 +108,8 @@ final class GeoCentroidAggregator extends MetricsAggregator {
final long bucketCount = counts.get(bucket);
final long mortonCode = centroids.get(bucket);
final GeoPoint bucketCentroid = (bucketCount > 0)
- ? new GeoPoint(GeoPointField.decodeLatitude(mortonCode), GeoPointField.decodeLongitude(mortonCode))
+ ? new GeoPoint(InternalGeoCentroid.decodeLatitude(mortonCode),
+ InternalGeoCentroid.decodeLongitude(mortonCode))
: null;
return new InternalGeoCentroid(name, bucketCentroid , bucketCount, pipelineAggregators(), metaData());
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
index 597ad6176b..bd65cd28af 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/geocentroid/InternalGeoCentroid.java
@@ -19,7 +19,7 @@
package org.elasticsearch.search.aggregations.metrics.geocentroid;
-import org.apache.lucene.spatial.geopoint.document.GeoPointField;
+import org.apache.lucene.geo.GeoEncodingUtils;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -38,6 +38,18 @@ public class InternalGeoCentroid extends InternalAggregation implements GeoCentr
protected final GeoPoint centroid;
protected final long count;
+ public static long encodeLatLon(double lat, double lon) {
+ return (Integer.toUnsignedLong(GeoEncodingUtils.encodeLatitude(lat)) << 32) | Integer.toUnsignedLong(GeoEncodingUtils.encodeLongitude(lon));
+ }
+
+ public static double decodeLatitude(long encodedLatLon) {
+ return GeoEncodingUtils.decodeLatitude((int) (encodedLatLon >>> 32));
+ }
+
+ public static double decodeLongitude(long encodedLatLon) {
+ return GeoEncodingUtils.decodeLongitude((int) (encodedLatLon & 0xFFFFFFFFL));
+ }
+
InternalGeoCentroid(String name, GeoPoint centroid, long count, List<PipelineAggregator>
pipelineAggregators, Map<String, Object> metaData) {
super(name, pipelineAggregators, metaData);
@@ -55,7 +67,7 @@ public class InternalGeoCentroid extends InternalAggregation implements GeoCentr
count = in.readVLong();
if (in.readBoolean()) {
final long hash = in.readLong();
- centroid = new GeoPoint(GeoPointField.decodeLatitude(hash), GeoPointField.decodeLongitude(hash));
+ centroid = new GeoPoint(decodeLatitude(hash), decodeLongitude(hash));
} else {
centroid = null;
}
@@ -67,7 +79,7 @@ public class InternalGeoCentroid extends InternalAggregation implements GeoCentr
if (centroid != null) {
out.writeBoolean(true);
// should we just write lat and lon separately?
- out.writeLong(GeoPointField.encodeLatLon(centroid.lat(), centroid.lon()));
+ out.writeLong(encodeLatLon(centroid.lat(), centroid.lon()));
} else {
out.writeBoolean(false);
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java
index cef7f37328..8ef4d0b7e2 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/max/MaxAggregator.java
@@ -82,10 +82,12 @@ public class MaxAggregator extends NumericMetricsAggregator.SingleValue {
maxes = bigArrays.grow(maxes, bucket + 1);
maxes.fill(from, maxes.size(), Double.NEGATIVE_INFINITY);
}
- final double value = values.get(doc);
- double max = maxes.get(bucket);
- max = Math.max(max, value);
- maxes.set(bucket, max);
+ if (values.advanceExact(doc)) {
+ final double value = values.doubleValue();
+ double max = maxes.get(bucket);
+ max = Math.max(max, value);
+ maxes.set(bucket, max);
+ }
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java
index 31e87b12a6..f355f55139 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/min/MinAggregator.java
@@ -81,10 +81,12 @@ public class MinAggregator extends NumericMetricsAggregator.SingleValue {
mins = bigArrays.grow(mins, bucket + 1);
mins.fill(from, mins.size(), Double.POSITIVE_INFINITY);
}
- final double value = values.get(doc);
- double min = mins.get(bucket);
- min = Math.min(min, value);
- mins.set(bucket, min);
+ if (values.advanceExact(doc)) {
+ final double value = values.doubleValue();
+ double min = mins.get(bucket);
+ min = Math.min(min, value);
+ mins.set(bucket, min);
+ }
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/AbstractHDRPercentilesAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/AbstractHDRPercentilesAggregator.java
index bf4443c887..47c267aae9 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/AbstractHDRPercentilesAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/hdr/AbstractHDRPercentilesAggregator.java
@@ -95,10 +95,11 @@ public abstract class AbstractHDRPercentilesAggregator extends NumericMetricsAgg
states.set(bucket, state);
}
- values.setDocument(doc);
- final int valueCount = values.count();
- for (int i = 0; i < valueCount; i++) {
- state.recordValue(values.valueAt(i));
+ if (values.advanceExact(doc)) {
+ final int valueCount = values.docValueCount();
+ for (int i = 0; i < valueCount; i++) {
+ state.recordValue(values.nextValue());
+ }
}
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/AbstractTDigestPercentilesAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/AbstractTDigestPercentilesAggregator.java
index 2c68d580e1..1b5ed510f8 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/AbstractTDigestPercentilesAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/percentiles/tdigest/AbstractTDigestPercentilesAggregator.java
@@ -87,10 +87,11 @@ public abstract class AbstractTDigestPercentilesAggregator extends NumericMetric
states.set(bucket, state);
}
- values.setDocument(doc);
- final int valueCount = values.count();
- for (int i = 0; i < valueCount; i++) {
- state.add(values.valueAt(i));
+ if (values.advanceExact(doc)) {
+ final int valueCount = values.docValueCount();
+ for (int i = 0; i < valueCount; i++) {
+ state.add(values.nextValue());
+ }
}
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java
index e3657c3851..cca176bd1a 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/StatsAggregator.java
@@ -94,21 +94,22 @@ public class StatsAggregator extends NumericMetricsAggregator.MultiValue {
maxes.fill(from, overSize, Double.NEGATIVE_INFINITY);
}
- values.setDocument(doc);
- final int valuesCount = values.count();
- counts.increment(bucket, valuesCount);
- double sum = 0;
- double min = mins.get(bucket);
- double max = maxes.get(bucket);
- for (int i = 0; i < valuesCount; i++) {
- double value = values.valueAt(i);
- sum += value;
- min = Math.min(min, value);
- max = Math.max(max, value);
+ if (values.advanceExact(doc)) {
+ final int valuesCount = values.docValueCount();
+ counts.increment(bucket, valuesCount);
+ double sum = 0;
+ double min = mins.get(bucket);
+ double max = maxes.get(bucket);
+ for (int i = 0; i < valuesCount; i++) {
+ double value = values.nextValue();
+ sum += value;
+ min = Math.min(min, value);
+ max = Math.max(max, value);
+ }
+ sums.increment(bucket, sum);
+ mins.set(bucket, min);
+ maxes.set(bucket, max);
}
- sums.increment(bucket, sum);
- mins.set(bucket, min);
- maxes.set(bucket, max);
}
};
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java
index d6faf5cbb7..8dd78bf137 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStatsAggregator.java
@@ -102,24 +102,25 @@ public class ExtendedStatsAggregator extends NumericMetricsAggregator.MultiValue
maxes.fill(from, overSize, Double.NEGATIVE_INFINITY);
}
- values.setDocument(doc);
- final int valuesCount = values.count();
- counts.increment(bucket, valuesCount);
- double sum = 0;
- double sumOfSqr = 0;
- double min = mins.get(bucket);
- double max = maxes.get(bucket);
- for (int i = 0; i < valuesCount; i++) {
- double value = values.valueAt(i);
- sum += value;
- sumOfSqr += value * value;
- min = Math.min(min, value);
- max = Math.max(max, value);
+ if (values.advanceExact(doc)) {
+ final int valuesCount = values.docValueCount();
+ counts.increment(bucket, valuesCount);
+ double sum = 0;
+ double sumOfSqr = 0;
+ double min = mins.get(bucket);
+ double max = maxes.get(bucket);
+ for (int i = 0; i < valuesCount; i++) {
+ double value = values.nextValue();
+ sum += value;
+ sumOfSqr += value * value;
+ min = Math.min(min, value);
+ max = Math.max(max, value);
+ }
+ sums.increment(bucket, sum);
+ sumOfSqrs.increment(bucket, sumOfSqr);
+ mins.set(bucket, min);
+ maxes.set(bucket, max);
}
- sums.increment(bucket, sum);
- sumOfSqrs.increment(bucket, sumOfSqr);
- mins.set(bucket, min);
- maxes.set(bucket, max);
}
};
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java
index f7f2ee5501..bd325b3937 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/sum/SumAggregator.java
@@ -71,13 +71,14 @@ public class SumAggregator extends NumericMetricsAggregator.SingleValue {
@Override
public void collect(int doc, long bucket) throws IOException {
sums = bigArrays.grow(sums, bucket + 1);
- values.setDocument(doc);
- final int valuesCount = values.count();
- double sum = 0;
- for (int i = 0; i < valuesCount; i++) {
- sum += values.valueAt(i);
+ if (values.advanceExact(doc)) {
+ final int valuesCount = values.docValueCount();
+ double sum = 0;
+ for (int i = 0; i < valuesCount; i++) {
+ sum += values.nextValue();
+ }
+ sums.increment(bucket, sum);
}
- sums.increment(bucket, sum);
}
};
}
diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java
index e0ed6d1ade..929e26d04b 100644
--- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java
+++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/valuecount/ValueCountAggregator.java
@@ -73,8 +73,9 @@ public class ValueCountAggregator extends NumericMetricsAggregator.SingleValue {
@Override
public void collect(int doc, long bucket) throws IOException {
counts = bigArrays.grow(counts, bucket + 1);
- values.setDocument(doc);
- counts.increment(bucket, values.count());
+ if (values.advanceExact(doc)) {
+ counts.increment(bucket, values.docValueCount());
+ }
}
};