From c46e3b60d631e5500e74af34d11aa63bd2af4b46 Mon Sep 17 00:00:00 2001 From: Alexander Kazakov Date: Sun, 9 Oct 2016 02:47:39 +0300 Subject: [PATCH] Make path syntax for lower and upper standard deviation bounds in the extended_stats aggregation more obvious Fix for #19040 --- .../metrics/stats/extended/ExtendedStats.java | 2 +- .../stats/extended/InternalExtendedStats.java | 14 ++++++++++++++ .../metrics/ExtendedStatsTests.java | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStats.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStats.java index 1b235a6cfecaa..8a198a5825a3d 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStats.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/ExtendedStats.java @@ -67,7 +67,7 @@ public interface ExtendedStats extends Stats { String getVarianceAsString(); - public enum Bounds { + enum Bounds { UPPER, LOWER } diff --git a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/InternalExtendedStats.java b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/InternalExtendedStats.java index d848001171c6b..841ade73a8db9 100644 --- a/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/InternalExtendedStats.java +++ b/core/src/main/java/org/elasticsearch/search/aggregations/metrics/stats/extended/InternalExtendedStats.java @@ -90,6 +90,20 @@ public double value(String name) { return super.value(name); } + @Override + public Object getProperty(List path) { + if (path.size() == 2 && "std_deviation_bounds".equals(path.get(0))) { + String bound = path.get(1); + if ("lower".equals(bound)) { + return getStdDeviationBound(Bounds.LOWER); + } + if ("upper".equals(bound)) { + return getStdDeviationBound(Bounds.UPPER); + } + } + return super.getProperty(path); + } + @Override public double getSumOfSquares() { return sumOfSqrs; diff --git a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/ExtendedStatsTests.java b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/ExtendedStatsTests.java index 3f78cc17aa990..561eef434eb83 100644 --- a/core/src/test/java/org/elasticsearch/search/aggregations/metrics/ExtendedStatsTests.java +++ b/core/src/test/java/org/elasticsearch/search/aggregations/metrics/ExtendedStatsTests.java @@ -19,7 +19,13 @@ package org.elasticsearch.search.aggregations.metrics; +import org.elasticsearch.search.DocValueFormat; +import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats; import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStatsAggregationBuilder; +import org.elasticsearch.search.aggregations.metrics.stats.extended.InternalExtendedStats; +import org.junit.Test; + +import java.util.Collections; public class ExtendedStatsTests extends AbstractNumericMetricTestCase { @@ -32,4 +38,15 @@ protected ExtendedStatsAggregationBuilder doCreateTestAggregatorFactory() { return factory; } + @Test + public void getStdDeviationBoundsByPath() throws Exception { + double min = 1.0; + double max = 4.0; + + ExtendedStats stats = new InternalExtendedStats("test", 2, min + max, min, max, Math.pow(min, 2) + Math.pow(max, 2), + 1.0, DocValueFormat.RAW, Collections.emptyList(), Collections.emptyMap()); + + assertEquals(stats.getStdDeviationBound(ExtendedStats.Bounds.LOWER), stats.getProperty("std_deviation_bounds.lower")); + assertEquals(stats.getStdDeviationBound(ExtendedStats.Bounds.UPPER), stats.getProperty("std_deviation_bounds.upper")); + } }