Skip to content

Commit 045df55

Browse files
committed
Fix broken aggs on ES 1.5 due to elastic/elasticsearch#10284
1 parent 6ba96e9 commit 045df55

File tree

1 file changed

+65
-36
lines changed

1 file changed

+65
-36
lines changed

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

Lines changed: 65 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -116,15 +116,23 @@ private IAggregation GetPercentilesMetricAggregation(JsonReader reader, JsonSeri
116116
reader.Read();
117117
while (reader.TokenType != JsonToken.EndObject)
118118
{
119-
var percentile = double.Parse(reader.Value as string, CultureInfo.InvariantCulture);
120-
reader.Read();
121-
var value = reader.Value as double?;
122-
percentileItems.Add(new PercentileItem()
119+
if ((reader.Value as string).Contains("_as_string"))
123120
{
124-
Percentile = percentile,
125-
Value = value.GetValueOrDefault(0)
126-
});
127-
reader.Read();
121+
reader.Read();
122+
reader.Read();
123+
}
124+
if (reader.TokenType != JsonToken.EndObject)
125+
{
126+
var percentile = double.Parse(reader.Value as string, CultureInfo.InvariantCulture);
127+
reader.Read();
128+
var value = reader.Value as double?;
129+
percentileItems.Add(new PercentileItem()
130+
{
131+
Percentile = percentile,
132+
Value = value.GetValueOrDefault(0)
133+
});
134+
reader.Read();
135+
}
128136
}
129137
metric.Items = percentileItems;
130138
if (!oldFormat) reader.Read();
@@ -168,56 +176,72 @@ private IAggregation GetStatsAggregation(JsonReader reader, JsonSerializer seria
168176
reader.Read(); reader.Read();
169177
var sum = (reader.Value as double?);
170178

179+
var statsMetric = new StatsMetric()
180+
{
181+
Average = average,
182+
Count = count,
183+
Max = max,
184+
Min = min,
185+
Sum = sum
186+
};
187+
171188
reader.Read();
189+
172190
if (reader.TokenType == JsonToken.EndObject)
173-
return new StatsMetric()
174-
{
175-
Average = average,
176-
Count = count,
177-
Max = max,
178-
Min = min,
179-
Sum = sum
180-
};
191+
return statsMetric;
192+
193+
while (reader.TokenType != JsonToken.EndObject && (reader.Value as string).Contains("_as_string"))
194+
{
195+
reader.Read();
196+
reader.Read();
197+
}
198+
199+
if (reader.TokenType == JsonToken.EndObject)
200+
return statsMetric;
201+
202+
return GetExtendedStatsAggregation(statsMetric, reader);
203+
}
204+
205+
private IAggregation GetExtendedStatsAggregation(StatsMetric statsMetric, JsonReader reader)
206+
{
207+
var extendedStatsMetric = new ExtendedStatsMetric()
208+
{
209+
Average = statsMetric.Average,
210+
Count = statsMetric.Count,
211+
Max = statsMetric.Max,
212+
Min = statsMetric.Min,
213+
Sum = statsMetric.Sum
214+
};
181215

182216
reader.Read();
183-
var sumOfSquares = (reader.Value as double?);
184-
reader.Read(); reader.Read();
185-
var variance = (reader.Value as double?);
217+
extendedStatsMetric.SumOfSquares = (reader.Value as double?);
218+
reader.Read();
219+
reader.Read();
220+
extendedStatsMetric.Variance = (reader.Value as double?);
186221
reader.Read(); reader.Read();
187-
var stdDeviation = (reader.Value as double?);
222+
extendedStatsMetric.StdDeviation = (reader.Value as double?);
188223
reader.Read();
189224

190-
StandardDeviationBounds stdDeviationBounds = null;
191225
if (reader.TokenType != JsonToken.EndObject)
192226
{
193-
stdDeviationBounds = new StandardDeviationBounds();
227+
var bounds = new StandardDeviationBounds();
194228
reader.Read();
195229
reader.Read();
196230
if ((reader.Value as string) == "upper")
197231
{
198232
reader.Read();
199-
stdDeviationBounds.Upper = reader.Value as double?;
233+
bounds.Upper = reader.Value as double?;
200234
}
201235
reader.Read();
202236
if ((reader.Value as string) == "lower")
203237
{
204238
reader.Read();
205-
stdDeviationBounds.Lower = reader.Value as double?;
239+
bounds.Lower = reader.Value as double?;
206240
}
241+
extendedStatsMetric.StdDeviationBounds = bounds;
207242
}
208243

209-
return new ExtendedStatsMetric()
210-
{
211-
Average = average,
212-
Count = count,
213-
Max = max,
214-
Min = min,
215-
StdDeviation = stdDeviation,
216-
Sum = sum,
217-
SumOfSquares = sumOfSquares,
218-
Variance = variance,
219-
StdDeviationBounds = stdDeviationBounds
220-
};
244+
return extendedStatsMetric;
221245
}
222246

223247
private IAggregation GetDateHistogramAggregation(JsonReader reader, JsonSerializer serializer)
@@ -379,6 +403,11 @@ private IAggregation GetValueMetricOrAggregation(JsonReader reader, JsonSerializ
379403
if (valueMetric.Value != null)
380404
{
381405
reader.Read();
406+
if (reader.TokenType != JsonToken.EndObject)
407+
{
408+
reader.Read();
409+
reader.Read();
410+
}
382411
return valueMetric;
383412
}
384413

0 commit comments

Comments
 (0)