private IEnumerable <AggregationResult <Specimen> > ProcessAggregations(SearchResponse <Specimen> response, SpecimenFindParams specimenFindParams) { var aggregations = new List <AggregationResult <Specimen> >(); foreach (var aggregation in response.Aggregations) { var bucketAggregations = new List <AggregationResult <Specimen> >(); if (aggregation.Value is SingleBucketAggregate singleBucket) { foreach (var bucket in singleBucket) { if (bucket.Value is BucketAggregate bucketValues) { var bucketResults = new Dictionary <string, long?>(); // Process values foreach (var bucketValue in bucketValues.Items) { var keyedBucket = bucketValue as KeyedBucket <object>; bucketResults.Add(keyedBucket.Key.ToString(), keyedBucket.DocCount); } if (bucketResults.Any()) { bucketAggregations.Add(new AggregationResult <Specimen> { Name = aggregation.Key, Values = bucketResults }); } } } if (!bucketAggregations.Any() && singleBucket.DocCount > 0) { bucketAggregations.Add(new AggregationResult <Specimen> { Name = aggregation.Key, Values = new Dictionary <string, long?> { { specimenFindParams.Filters.StageFilter.Value, singleBucket.DocCount } } }); } aggregations.AddRange(bucketAggregations); } else if (aggregation.Value is BucketAggregate bucket) { var bucketResults = new Dictionary <string, long?>(); // Process values foreach (var bucketValue in bucket.Items) { var keyedBucket = bucketValue as KeyedBucket <object>; bucketResults.Add(keyedBucket.Key.ToString(), keyedBucket.DocCount); } bucketAggregations.Add(new AggregationResult <Specimen> { Name = aggregation.Key, Values = bucketResults }); aggregations.AddRange(bucketAggregations); } } return(aggregations); }
private IEnumerable <AggregationResult <PlantInfo> > ProcessAggregations(SearchResponse <PlantInfo> response, PlantInfoFindParams plantInfoFindParams) { var aggregations = new List <AggregationResult <PlantInfo> >(); foreach (var aggregation in response.Aggregations) { var bucketAggregations = new List <AggregationResult <PlantInfo> >(); if (aggregation.Value is SingleBucketAggregate singleBucket) { foreach (var bucket in singleBucket) { if (bucket.Value is BucketAggregate bucketValues) { var bucketResults = new Dictionary <string, long?>(); // Process values foreach (var bucketValue in bucketValues.Items) { var keyedBucket = bucketValue as KeyedBucket <object>; bucketResults.Add(keyedBucket.Key.ToString(), keyedBucket.DocCount); } if (bucketResults.Any()) { bucketAggregations.Add(new AggregationResult <PlantInfo> { Name = aggregation.Key, Values = bucketResults.OrderBy(v => v.Key).ToDictionary(k => k.Key, v => v.Value) }); } } } if (!bucketAggregations.Any()) { var filter = PlantInfoFindParams.GetFilter(aggregation.Key, plantInfoFindParams) as Filter <string>; bucketAggregations.Add(new AggregationResult <PlantInfo> { Name = aggregation.Key, Values = new Dictionary <string, long?> { { filter.Value ?? "0", singleBucket.DocCount } } }); } aggregations.AddRange(bucketAggregations); } else if (aggregation.Value is BucketAggregate bucket) { var bucketResults = new Dictionary <string, long?>(); // Process values foreach (var bucketValue in bucket.Items) { if (bucketValue is RangeBucket rangeBucket) { bucketResults.Add(rangeBucket.Key.ToString(), rangeBucket.DocCount); } else { var keyedBucket = bucketValue as KeyedBucket <object>; bucketResults.Add(keyedBucket.Key.ToString(), keyedBucket.DocCount); } } bucketAggregations.Add(new AggregationResult <PlantInfo> { Name = aggregation.Key, Values = bucketResults.OrderBy(v => v.Key).ToDictionary(k => k.Key, v => v.Value) }); aggregations.AddRange(bucketAggregations); } } return(aggregations); }