Skip to content

Commit d4db50e

Browse files
committed
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
1 parent 87c4d43 commit d4db50e

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

src/Nest/Domain/Aggregations/ExtendedStatsMetric.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,12 @@ public class ExtendedStatsMetric : IMetricAggregation
1010
public double? SumOfSquares { get; set; }
1111
public double? Variance { get; set; }
1212
public double? StdDeviation { get; set; }
13+
public StandardDeviationBounds StdDeviationBounds { get; set; }
14+
}
15+
16+
public class StandardDeviationBounds
17+
{
18+
public double? Upper { get; set; }
19+
public double? Lower { get; set; }
1320
}
1421
}

src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,18 +184,39 @@ private IAggregation GetStatsAggregation(JsonReader reader, JsonSerializer seria
184184
reader.Read(); reader.Read();
185185
var variance = (reader.Value as double?);
186186
reader.Read(); reader.Read();
187-
var stdVariation = (reader.Value as double?);
187+
var stdDeviation = (reader.Value as double?);
188188
reader.Read();
189+
190+
StandardDeviationBounds stdDeviationBounds = null;
191+
if (reader.TokenType != JsonToken.EndObject)
192+
{
193+
stdDeviationBounds = new StandardDeviationBounds();
194+
reader.Read();
195+
reader.Read();
196+
if ((reader.Value as string) == "upper")
197+
{
198+
reader.Read();
199+
stdDeviationBounds.Upper = reader.Value as double?;
200+
}
201+
reader.Read();
202+
if ((reader.Value as string) == "lower")
203+
{
204+
reader.Read();
205+
stdDeviationBounds.Lower = reader.Value as double?;
206+
}
207+
}
208+
189209
return new ExtendedStatsMetric()
190210
{
191211
Average = average,
192212
Count = count,
193213
Max = max,
194214
Min = min,
195-
StdDeviation = stdVariation,
215+
StdDeviation = stdDeviation,
196216
Sum = sum,
197217
SumOfSquares = sumOfSquares,
198-
Variance = variance
218+
Variance = variance,
219+
StdDeviationBounds = stdDeviationBounds
199220
};
200221
}
201222

src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,27 @@ public void ExtendedStats()
8181
statsBucket.Should().NotBeNull();
8282
statsBucket.Count.Should().BeGreaterThan(1);
8383
statsBucket.StdDeviation.Should().BeGreaterThan(1);
84-
}
84+
}
85+
86+
[Test]
87+
[SkipVersion("0 - 1.4.2", "Standard deviation bounds added in 1.4.3")]
88+
public void ExtendedStatsWithStandardDeviationBounds()
89+
{
90+
var results = this.Client.Search<ElasticsearchProject>(s => s
91+
.Size(0)
92+
.Aggregations(a => a
93+
.ExtendedStats("stats_agg", t => t.Field(p => p.LOC))
94+
)
95+
);
96+
results.IsValid.Should().BeTrue();
97+
var statsBucket = results.Aggs.ExtendedStats("stats_agg");
98+
statsBucket.Should().NotBeNull();
99+
statsBucket.Count.Should().BeGreaterThan(1);
100+
statsBucket.StdDeviation.Should().BeGreaterThan(1);
101+
statsBucket.StdDeviationBounds.Should().NotBeNull();
102+
statsBucket.StdDeviationBounds.Upper.Should().NotBe(0);
103+
statsBucket.StdDeviationBounds.Lower.Should().NotBe(0);
104+
}
85105

86106
}
87107
}

0 commit comments

Comments
 (0)