@Override public double value() { return getValue(); }
@Override public InternalAvg doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { long count = 0; double sum = 0; double compensation = 0; // Compute the sum of double values with Kahan summation algorithm which is more // accurate than naive summation. for (InternalAggregation aggregation : aggregations) { InternalAvg avg = (InternalAvg) aggregation; count += avg.count; if (Double.isFinite(avg.sum) == false) { sum += avg.sum; } else if (Double.isFinite(sum)) { double corrected = avg.sum - compensation; double newSum = sum + corrected; compensation = (newSum - sum) - corrected; sum = newSum; } } return new InternalAvg(getName(), sum, count, format, pipelineAggregators(), getMetaData()); }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalAvg(name, 0.0, 0L, format, pipelineAggregators(), metaData()); }
@Override public InternalAvg readResult(StreamInput in) throws IOException { InternalAvg result = new InternalAvg(); result.readFrom(in); return result; } };
@Override public InternalAggregation buildAggregation(long bucket) { if (valuesSource == null || bucket >= sums.size()) { return buildEmptyAggregation(); } return new InternalAvg(name, sums.get(bucket), counts.get(bucket), format, pipelineAggregators(), metaData()); }
@Override public InternalAvg doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { long count = 0; double sum = 0; for (InternalAggregation aggregation : aggregations) { count += ((InternalAvg) aggregation).count; sum += ((InternalAvg) aggregation).sum; } return new InternalAvg(getName(), sum, count, format, pipelineAggregators(), getMetaData()); }
@Override public XContentBuilder doXContentBody(XContentBuilder builder, Params params) throws IOException { builder.field(CommonFields.VALUE.getPreferredName(), count != 0 ? getValue() : null); if (count != 0 && format != DocValueFormat.RAW) { builder.field(CommonFields.VALUE_AS_STRING.getPreferredName(), format.format(getValue()).toString()); } return builder; }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalAvg(name, 0.0, 0L, format, pipelineAggregators(), metaData()); }
@Override public InternalAvg doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { long count = 0; double sum = 0; for (InternalAggregation aggregation : aggregations) { count += ((InternalAvg) aggregation).count; sum += ((InternalAvg) aggregation).sum; } return new InternalAvg(getName(), sum, count, valueFormatter, pipelineAggregators(), getMetaData()); }
@Override public double value() { return getValue(); }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalAvg(name, 0.0, 0L, format, pipelineAggregators(), metaData()); }
@Override public InternalAvg doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { long count = 0; double sum = 0; double compensation = 0; // Compute the sum of double values with Kahan summation algorithm which is more // accurate than naive summation. for (InternalAggregation aggregation : aggregations) { InternalAvg avg = (InternalAvg) aggregation; count += avg.count; if (Double.isFinite(avg.sum) == false) { sum += avg.sum; } else if (Double.isFinite(sum)) { double corrected = avg.sum - compensation; double newSum = sum + corrected; compensation = (newSum - sum) - corrected; sum = newSum; } } return new InternalAvg(getName(), sum, count, format, pipelineAggregators(), getMetaData()); }
@Override public double value() { return getValue(); }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalAvg(name, 0.0, 0L, format, pipelineAggregators(), metaData()); }
@Override public InternalAvg doReduce(List<InternalAggregation> aggregations, ReduceContext reduceContext) { long count = 0; double sum = 0; double compensation = 0; // Compute the sum of double values with Kahan summation algorithm which is more // accurate than naive summation. for (InternalAggregation aggregation : aggregations) { InternalAvg avg = (InternalAvg) aggregation; count += avg.count; if (Double.isFinite(avg.sum) == false) { sum += avg.sum; } else if (Double.isFinite(sum)) { double corrected = avg.sum - compensation; double newSum = sum + corrected; compensation = (newSum - sum) - corrected; sum = newSum; } } return new InternalAvg(getName(), sum, count, format, pipelineAggregators(), getMetaData()); }
@Override public double value() { return getValue(); }
@Override public InternalAggregation buildEmptyAggregation() { return new InternalAvg(name, 0.0, 0l, formatter, pipelineAggregators(), metaData()); }
@Override public double value() { return getValue(); }
@Override public InternalAggregation buildAggregation(long bucket) { if (valuesSource == null || bucket >= sums.size()) { return buildEmptyAggregation(); } return new InternalAvg(name, sums.get(bucket), counts.get(bucket), format, pipelineAggregators(), metaData()); }
/** * Gets the aggregated result. * * @param internalAggs * the internal aggs * @param identifier * the identifier * @param exp * the exp * @return the aggregated result */ private Object getAggregatedResult(InternalAggregations internalAggs, String identifier, Expression exp) { switch (identifier) { case Expression.MIN: return (((InternalMin) internalAggs.get(exp.toParsedText())).getValue()); case Expression.MAX: return (((InternalMax) internalAggs.get(exp.toParsedText())).getValue()); case Expression.AVG: return (((InternalAvg) internalAggs.get(exp.toParsedText())).getValue()); case Expression.SUM: return (((InternalSum) internalAggs.get(exp.toParsedText())).getValue()); case Expression.COUNT: return (((InternalValueCount) internalAggs.get(exp.toParsedText())).getValue()); } throw new KunderaException("No support for " + identifier + " aggregation."); }