Skip to content

Commit 043128e

Browse files
committed
More aggregation refactoring: better differentiation between bucket and bucket item
1 parent eab9c9a commit 043128e

File tree

18 files changed

+211
-218
lines changed

18 files changed

+211
-218
lines changed

src/Benchmarking/project.lock.json

Lines changed: 37 additions & 37 deletions
Large diffs are not rendered by default.

src/Elasticsearch.Net/project.lock.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1739,7 +1739,7 @@
17391739
"runtime.win7.System.Net.Requests/4.0.11-beta-23516": {
17401740
"type": "package",
17411741
"serviceable": true,
1742-
"sha512": "mqWBQUhXhzkiwb+zVUuKg+wswJUsnQtZkFtz6eISw8vWNXA9i2jkzYjU3pjjIVmtdopnhle9YaS4a/w4OuWGLw==",
1742+
"sha512": "HI99nCEekL4SNvkLmpqkOE0PuEF5B6xyDcnJesdjo06BrGYH3QCvqJt2VmzBVe6hDSo6FnGOlhMvLdCUpDXiXA==",
17431743
"files": [
17441744
"ref/dotnet/_._",
17451745
"runtime.win7.System.Net.Requests.4.0.11-beta-23516.nupkg",
@@ -2025,7 +2025,7 @@
20252025
"System.Dynamic.Runtime/4.0.11-beta-23516": {
20262026
"type": "package",
20272027
"serviceable": true,
2028-
"sha512": "C2GXB20I5vMcO4wemZr5pEjwwEb6H6zVkwF12JSUhripKBIKgI0YKpfp9glyDSL903cYgIXAztMQDajwCR0PmA==",
2028+
"sha512": "ypkxS0e+yUw7F6JEwuB22u0qqruMeZFOmtcImh2efDHpTAuhF2FOqCDJ7f4qLf9yomVvB4kjkZ6xGunbIQryxQ==",
20292029
"files": [
20302030
"lib/DNXCore50/System.Dynamic.Runtime.dll",
20312031
"lib/MonoAndroid10/_._",

src/Nest/Aggregations/AggregationResult.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66
namespace Nest
77
{
88
[ExactContractJsonConverter(typeof(AggregationResultJsonConverter))]
9-
public interface IAggregationResult
9+
public interface IAggregationItem
10+
{
11+
}
12+
13+
public interface IAggregationResult : IAggregationItem
1014
{
1115
IDictionary<string, object> Meta { get; set; }
1216
}

src/Nest/Aggregations/AggregationResultJsonConverter.cs

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ internal class AggregationResultJsonConverter : JsonConverter
1919

2020
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) => this.ReadAggregation(reader, serializer);
2121

22-
public override bool CanConvert(Type objectType) => objectType == typeof(IAggregationResult);
22+
public override bool CanConvert(Type objectType) => objectType == typeof(IAggregationItem);
2323

2424
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
2525
{
2626
throw new NotSupportedException();
2727
}
2828

29-
private IAggregationResult ReadAggregation(JsonReader reader, JsonSerializer serializer)
29+
private IAggregationItem ReadAggregation(JsonReader reader, JsonSerializer serializer)
3030
{
3131
if (reader.TokenType != JsonToken.StartObject)
3232
return null;
@@ -35,11 +35,11 @@ private IAggregationResult ReadAggregation(JsonReader reader, JsonSerializer ser
3535
if (reader.TokenType != JsonToken.PropertyName)
3636
return null;
3737

38-
IAggregationResult result = null;
38+
IAggregationItem item = null;
3939

4040
var property = reader.Value as string;
4141
if (_numeric.IsMatch(property))
42-
result = GetPercentilesMetricAggregation(reader, serializer, oldFormat: true);
42+
item = GetPercentilesMetric(reader, serializer, oldFormat: true);
4343

4444
var meta = (property == "meta") ? GetMetadata(reader) : null;
4545

@@ -50,42 +50,44 @@ private IAggregationResult ReadAggregation(JsonReader reader, JsonSerializer ser
5050
case "values":
5151
reader.Read();
5252
reader.Read();
53-
result = GetPercentilesMetricAggregation(reader, serializer);
53+
item = GetPercentilesMetric(reader, serializer);
5454
break;
5555
case "value":
56-
result = GetValueMetricOrAggregation(reader, serializer);
56+
item = GetValueMetric(reader, serializer);
5757
break;
5858
case "buckets":
5959
case "doc_count_error_upper_bound":
60-
result = GetBucketAggregation(reader, serializer);
60+
item = GetBucket(reader, serializer);
6161
break;
6262
case "key":
63-
result = GetKeyedBucketItem(reader, serializer);
63+
item = GetKeyedBucketItem(reader, serializer);
6464
break;
6565
case "from":
6666
case "to":
67-
result = GetRangeAggregation(reader, serializer);
67+
item = GetRangeItem(reader, serializer);
6868
break;
6969
case "key_as_string":
70-
result = GetDateHistogramAggregation(reader, serializer);
70+
item = GetDateHistrogramItem(reader, serializer);
7171
break;
7272
case "count":
73-
result = GetStatsAggregation(reader, serializer);
73+
item = GetStatsMetric(reader, serializer);
7474
break;
7575
case "doc_count":
76-
result = GetSingleBucketAggregation(reader, serializer);
76+
item = GetDocCountBucket(reader, serializer);
7777
break;
7878
case "bounds":
79-
result = GetGeoBoundsMetricAggregation(reader, serializer);
79+
item = GetGeoBoundsMetric(reader, serializer);
8080
break;
8181
case "hits":
82-
result = GetHitsAggregation(reader, serializer);
82+
item = GetTopHitsMetric(reader, serializer);
8383
break;
8484
default:
8585
return null;
8686
}
87-
result.Meta = meta;
88-
return result;
87+
88+
if (item is IAggregationResult)
89+
((IAggregationResult)item).Meta = meta;
90+
return item;
8991
}
9092

9193
private Dictionary<string, object> GetMetadata(JsonReader reader)
@@ -105,7 +107,7 @@ private Dictionary<string, object> GetMetadata(JsonReader reader)
105107
return meta;
106108
}
107109

108-
private IAggregationResult GetHitsAggregation(JsonReader reader, JsonSerializer serializer)
110+
private IAggregationItem GetTopHitsMetric(JsonReader reader, JsonSerializer serializer)
109111
{
110112
reader.Read();
111113
var o = JObject.Load(reader);
@@ -119,7 +121,7 @@ private IAggregationResult GetHitsAggregation(JsonReader reader, JsonSerializer
119121
return new TopHitsMetric(hits, serializer) { Total = total, MaxScore = maxScore };
120122
}
121123

122-
private IAggregationResult GetGeoBoundsMetricAggregation(JsonReader reader, JsonSerializer serializer)
124+
private IAggregationItem GetGeoBoundsMetric(JsonReader reader, JsonSerializer serializer)
123125
{
124126
reader.Read();
125127
var o = JObject.Load(reader);
@@ -146,7 +148,7 @@ private IAggregationResult GetGeoBoundsMetricAggregation(JsonReader reader, Json
146148
return geoBoundsMetric;
147149
}
148150

149-
private IAggregationResult GetPercentilesMetricAggregation(JsonReader reader, JsonSerializer serializer, bool oldFormat = false)
151+
private IAggregationItem GetPercentilesMetric(JsonReader reader, JsonSerializer serializer, bool oldFormat = false)
150152
{
151153
var metric = new PercentilesMetric();
152154
var percentileItems = new List<PercentileItem>();
@@ -177,18 +179,18 @@ private IAggregationResult GetPercentilesMetricAggregation(JsonReader reader, Js
177179
return metric;
178180
}
179181

180-
private IAggregationResult GetSingleBucketAggregation(JsonReader reader, JsonSerializer serializer)
182+
private IAggregationItem GetDocCountBucket(JsonReader reader, JsonSerializer serializer)
181183
{
182184
reader.Read();
183185
var docCount = (reader.Value as long?).GetValueOrDefault(0);
184-
var bucket = new SingleBucket { DocCount = docCount };
186+
var bucket = new DocCountBucket { DocCount = docCount };
185187
reader.Read();
186188
if (reader.TokenType == JsonToken.PropertyName
187189
&& ((string)reader.Value) == "buckets"
188190
)
189191
{
190-
var b = this.GetBucketAggregation(reader, serializer) as Bucket;
191-
return new Bucket
192+
var b = this.GetBucket(reader, serializer) as BucketDto;
193+
return new BucketDto
192194
{
193195
DocCount = docCount,
194196
Items = b.Items
@@ -200,7 +202,7 @@ private IAggregationResult GetSingleBucketAggregation(JsonReader reader, JsonSer
200202
return bucket;
201203
}
202204

203-
private IAggregationResult GetStatsAggregation(JsonReader reader, JsonSerializer serializer)
205+
private IAggregationItem GetStatsMetric(JsonReader reader, JsonSerializer serializer)
204206
{
205207
reader.Read();
206208
var count = (reader.Value as long?).GetValueOrDefault(0);
@@ -239,7 +241,7 @@ private IAggregationResult GetStatsAggregation(JsonReader reader, JsonSerializer
239241
return GetExtendedStatsAggregation(statsMetric, reader);
240242
}
241243

242-
private IAggregationResult GetExtendedStatsAggregation(StatsMetric statsMetric, JsonReader reader)
244+
private IAggregationItem GetExtendedStatsAggregation(StatsMetric statsMetric, JsonReader reader)
243245
{
244246
var extendedStatsMetric = new ExtendedStatsMetric()
245247
{
@@ -295,7 +297,7 @@ private IAggregationResult GetExtendedStatsAggregation(StatsMetric statsMetric,
295297
return extendedStatsMetric;
296298
}
297299

298-
private IAggregationResult GetDateHistogramAggregation(JsonReader reader, JsonSerializer serializer)
300+
private IAggregationItem GetDateHistrogramItem(JsonReader reader, JsonSerializer serializer)
299301
{
300302
var keyAsString = reader.ReadAsString();
301303
reader.Read(); reader.Read();
@@ -310,15 +312,15 @@ private IAggregationResult GetDateHistogramAggregation(JsonReader reader, JsonSe
310312

311313
}
312314

313-
private IAggregationResult GetKeyedBucketItem(JsonReader reader, JsonSerializer serializer)
315+
private IAggregationItem GetKeyedBucketItem(JsonReader reader, JsonSerializer serializer)
314316
{
315317
var key = reader.ReadAsString();
316318
reader.Read();
317319
var property = reader.Value as string;
318320
if (property == "from" || property == "to")
319-
return GetRangeAggregation(reader, serializer, key);
321+
return GetRangeItem(reader, serializer, key);
320322

321-
var keyItem = new KeyedBucket();
323+
var keyItem = new KeyedBucketItem();
322324
keyItem.Key = key;
323325

324326
if (property == "key_as_string")
@@ -344,7 +346,7 @@ private IAggregationResult GetKeyedBucketItem(JsonReader reader, JsonSerializer
344346

345347
}
346348

347-
private IAggregationResult GetSignificantTermItem(JsonReader reader, JsonSerializer serializer, KeyedBucket keyItem)
349+
private IAggregationItem GetSignificantTermItem(JsonReader reader, JsonSerializer serializer, KeyedBucketItem keyItem)
348350
{
349351
reader.Read();
350352
var score = reader.Value as double?;
@@ -354,7 +356,7 @@ private IAggregationResult GetSignificantTermItem(JsonReader reader, JsonSeriali
354356
var significantTermItem = new SignificantTermItem()
355357
{
356358
Key = keyItem.Key,
357-
DocCount = keyItem.DocCount,
359+
DocCount = keyItem.DocCount.GetValueOrDefault(0),
358360
BgCount = bgCount.GetValueOrDefault(0),
359361
Score = score.GetValueOrDefault(0)
360362
};
@@ -363,12 +365,12 @@ private IAggregationResult GetSignificantTermItem(JsonReader reader, JsonSeriali
363365
return significantTermItem;
364366
}
365367

366-
private IDictionary<string, IAggregationResult> GetNestedAggregations(JsonReader reader, JsonSerializer serializer)
368+
private IDictionary<string, IAggregationItem> GetNestedAggregations(JsonReader reader, JsonSerializer serializer)
367369
{
368370
if (reader.TokenType != JsonToken.PropertyName)
369371
return null;
370372

371-
var nestedAggs = new Dictionary<string, IAggregationResult>();
373+
var nestedAggs = new Dictionary<string, IAggregationItem>();
372374
var currentDepth = reader.Depth;
373375
do
374376
{
@@ -383,9 +385,9 @@ private IDictionary<string, IAggregationResult> GetNestedAggregations(JsonReader
383385
return nestedAggs;
384386
}
385387

386-
private IAggregationResult GetBucketAggregation(JsonReader reader, JsonSerializer serializer)
388+
private IAggregationItem GetBucket(JsonReader reader, JsonSerializer serializer)
387389
{
388-
var bucket = new Bucket();
390+
var bucket = new BucketDto();
389391
var property = reader.Value as string;
390392
if (property == "doc_count_error_upper_bound")
391393
{
@@ -400,13 +402,13 @@ private IAggregationResult GetBucketAggregation(JsonReader reader, JsonSerialize
400402
bucket.SumOtherDocCount = reader.Value as long?;
401403
reader.Read();
402404
}
403-
var aggregations = new List<IAggregationResult>();
405+
var aggregations = new List<IAggregationItem>();
404406
reader.Read();
405407

406408
if (reader.TokenType == JsonToken.StartObject)
407409
{
408410
reader.Read();
409-
var aggs = new Dictionary<string, IAggregationResult>();
411+
var aggs = new Dictionary<string, IAggregationItem>();
410412
do
411413
{
412414
var name = reader.Value.ToString();
@@ -426,7 +428,7 @@ private IAggregationResult GetBucketAggregation(JsonReader reader, JsonSerialize
426428
if (reader.TokenType == JsonToken.EndArray)
427429
{
428430
reader.Read();
429-
bucket.Items = Enumerable.Empty<IAggregationResult>();
431+
bucket.Items = Enumerable.Empty<IAggregationItem>();
430432
return bucket;
431433
}
432434
do
@@ -440,7 +442,7 @@ private IAggregationResult GetBucketAggregation(JsonReader reader, JsonSerialize
440442
return bucket;
441443
}
442444

443-
private IAggregationResult GetValueMetricOrAggregation(JsonReader reader, JsonSerializer serializer)
445+
private IAggregationItem GetValueMetric(JsonReader reader, JsonSerializer serializer)
444446
{
445447
reader.Read();
446448
var valueMetric = new ValueMetric()
@@ -491,7 +493,7 @@ private IAggregationResult GetValueMetricOrAggregation(JsonReader reader, JsonSe
491493
return valueMetric;
492494
}
493495

494-
public IAggregationResult GetRangeAggregation(JsonReader reader, JsonSerializer serializer, string key = null)
496+
public IAggregationItem GetRangeItem(JsonReader reader, JsonSerializer serializer, string key = null)
495497
{
496498
string fromAsString = null, toAsString = null;
497499
long? docCount = null;

0 commit comments

Comments
 (0)