Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }