From d4db50e7fbd6bbcfce00d4589c3d6f8c893235d8 Mon Sep 17 00:00:00 2001 From: gmarz Date: Thu, 19 Mar 2015 11:05:31 -0400 Subject: [PATCH] Add support for standard deviation bounds to extended stats Added in ES 1.4.3. This consequently fixes a deserialization exception that occurs when running against an ES version earlier than 1.4.3. Closes #1281 --- .../Aggregations/ExtendedStatsMetric.cs | 7 +++++ .../Aggregations/AggregationConverter.cs | 27 ++++++++++++++++--- .../Aggregations/StatsAggregationTests.cs | 22 ++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/Nest/Domain/Aggregations/ExtendedStatsMetric.cs b/src/Nest/Domain/Aggregations/ExtendedStatsMetric.cs index b72b451099b..b8a9219de8d 100644 --- a/src/Nest/Domain/Aggregations/ExtendedStatsMetric.cs +++ b/src/Nest/Domain/Aggregations/ExtendedStatsMetric.cs @@ -10,5 +10,12 @@ public class ExtendedStatsMetric : IMetricAggregation public double? SumOfSquares { get; set; } public double? Variance { get; set; } public double? StdDeviation { get; set; } + public StandardDeviationBounds StdDeviationBounds { get; set; } + } + + public class StandardDeviationBounds + { + public double? Upper { get; set; } + public double? Lower { get; set; } } } \ No newline at end of file diff --git a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs index 4ed1cbe3189..bc3ca2dd5da 100644 --- a/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs +++ b/src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs @@ -184,18 +184,39 @@ private IAggregation GetStatsAggregation(JsonReader reader, JsonSerializer seria reader.Read(); reader.Read(); var variance = (reader.Value as double?); reader.Read(); reader.Read(); - var stdVariation = (reader.Value as double?); + var stdDeviation = (reader.Value as double?); reader.Read(); + + StandardDeviationBounds stdDeviationBounds = null; + if (reader.TokenType != JsonToken.EndObject) + { + stdDeviationBounds = new StandardDeviationBounds(); + reader.Read(); + reader.Read(); + if ((reader.Value as string) == "upper") + { + reader.Read(); + stdDeviationBounds.Upper = reader.Value as double?; + } + reader.Read(); + if ((reader.Value as string) == "lower") + { + reader.Read(); + stdDeviationBounds.Lower = reader.Value as double?; + } + } + return new ExtendedStatsMetric() { Average = average, Count = count, Max = max, Min = min, - StdDeviation = stdVariation, + StdDeviation = stdDeviation, Sum = sum, SumOfSquares = sumOfSquares, - Variance = variance + Variance = variance, + StdDeviationBounds = stdDeviationBounds }; } diff --git a/src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs b/src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs index 46306343c81..0162160840e 100644 --- a/src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs +++ b/src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs @@ -81,7 +81,27 @@ public void ExtendedStats() statsBucket.Should().NotBeNull(); statsBucket.Count.Should().BeGreaterThan(1); statsBucket.StdDeviation.Should().BeGreaterThan(1); - } + } + + [Test] + [SkipVersion("0 - 1.4.2", "Standard deviation bounds added in 1.4.3")] + public void ExtendedStatsWithStandardDeviationBounds() + { + var results = this.Client.Search(s => s + .Size(0) + .Aggregations(a => a + .ExtendedStats("stats_agg", t => t.Field(p => p.LOC)) + ) + ); + results.IsValid.Should().BeTrue(); + var statsBucket = results.Aggs.ExtendedStats("stats_agg"); + statsBucket.Should().NotBeNull(); + statsBucket.Count.Should().BeGreaterThan(1); + statsBucket.StdDeviation.Should().BeGreaterThan(1); + statsBucket.StdDeviationBounds.Should().NotBeNull(); + statsBucket.StdDeviationBounds.Upper.Should().NotBe(0); + statsBucket.StdDeviationBounds.Lower.Should().NotBe(0); + } } } \ No newline at end of file