@@ -93,9 +93,8 @@ private IBucket ReadBucket(JsonReader reader, JsonSerializer serializer)
9393 if ( reader . TokenType != JsonToken . PropertyName )
9494 return null ;
9595
96- IBucket item = null ;
97-
98- var property = reader . Value as string ;
96+ IBucket item ;
97+ var property = ( string ) reader . Value ;
9998
10099 switch ( property )
101100 {
@@ -125,7 +124,7 @@ private Dictionary<string, object> GetMetadata(JsonReader reader)
125124 reader . Read ( ) ;
126125 while ( reader . TokenType != JsonToken . EndObject )
127126 {
128- var key = reader . Value as string ;
127+ var key = ( string ) reader . Value ;
129128 reader . Read ( ) ;
130129 var value = reader . Value ;
131130 meta . Add ( key , value ) ;
@@ -330,16 +329,17 @@ private IAggregate GetExtendedStatsAggregate(StatsAggregate statsMetric, JsonRea
330329 return extendedStatsMetric ;
331330 }
332331
333- private IDictionary < string , IAggregate > GetSubAggregates ( JsonReader reader , JsonSerializer serializer )
332+ private IDictionary < string , IAggregate > GetSubAggregates ( JsonReader reader , JsonSerializer serializer , Dictionary < string , IAggregate > aggregates = null )
334333 {
335334 if ( reader . TokenType != JsonToken . PropertyName )
336- return null ;
335+ return aggregates ;
336+
337+ var nestedAggs = aggregates ?? new Dictionary < string , IAggregate > ( ) ;
337338
338- var nestedAggs = new Dictionary < string , IAggregate > ( ) ;
339339 var currentDepth = reader . Depth ;
340340 do
341341 {
342- var fieldName = reader . Value as string ;
342+ var fieldName = ( string ) reader . Value ;
343343 reader . Read ( ) ;
344344 var agg = this . ReadAggregate ( reader , serializer ) ;
345345 nestedAggs . Add ( fieldName , agg ) ;
@@ -353,14 +353,14 @@ private IDictionary<string, IAggregate> GetSubAggregates(JsonReader reader, Json
353353 private IAggregate GetMultiBucketAggregate ( JsonReader reader , JsonSerializer serializer )
354354 {
355355 var bucket = new BucketAggregate ( ) ;
356- var property = reader . Value as string ;
356+ var property = ( string ) reader . Value ;
357357 if ( property == "doc_count_error_upper_bound" )
358358 {
359359 reader . Read ( ) ;
360360 bucket . DocCountErrorUpperBound = reader . Value as long ? ;
361361 reader . Read ( ) ;
362362 }
363- property = reader . Value as string ;
363+ property = ( string ) reader . Value ;
364364 if ( property == "sum_other_doc_count" )
365365 {
366366 reader . Read ( ) ;
@@ -537,7 +537,7 @@ private IBucket GetKeyedBucket(JsonReader reader, JsonSerializer serializer)
537537 {
538538 var key = reader . ReadAsString ( ) ;
539539 reader . Read ( ) ;
540- var property = reader . Value as string ;
540+ var property = ( string ) reader . Value ;
541541 if ( property == "from" || property == "to" )
542542 return GetRangeBucket ( reader , serializer , key ) ;
543543
@@ -554,21 +554,30 @@ private IBucket GetKeyedBucket(JsonReader reader, JsonSerializer serializer)
554554 keyItem . DocCount = docCount . GetValueOrDefault ( 0 ) ;
555555 reader . Read ( ) ;
556556
557- var nextProperty = reader . Value as string ;
557+ Dictionary < string , IAggregate > aggregates = null ;
558+ var nextProperty = ( string ) reader . Value ;
558559 if ( nextProperty == "score" )
559560 {
560- return GetSignificantTermsBucket ( reader , serializer , keyItem ) ;
561- }
561+ reader . Read ( ) ;
562+ if ( reader . TokenType == JsonToken . Float || reader . TokenType == JsonToken . Null )
563+ {
564+ return GetSignificantTermsBucket ( reader , serializer , keyItem ) ;
565+ }
562566
567+ // score is the name of an aggregation
568+ aggregates = new Dictionary < string , IAggregate > ( ) ;
569+ var aggregate = this . ReadAggregate ( reader , serializer ) ;
570+ reader . Read ( ) ;
571+ aggregates . Add ( nextProperty , aggregate ) ;
572+ }
563573
564- keyItem . Aggregations = this . GetSubAggregates ( reader , serializer ) ;
574+ keyItem . Aggregations = this . GetSubAggregates ( reader , serializer , aggregates ) ;
565575 return keyItem ;
566576
567577 }
568578
569579 private IBucket GetSignificantTermsBucket ( JsonReader reader , JsonSerializer serializer , KeyedBucket keyItem )
570580 {
571- reader . Read ( ) ;
572581 var score = reader . Value as double ? ;
573582 reader . Read ( ) ;
574583 reader . Read ( ) ;
0 commit comments