示例#1
0
        private AggregationContainerDescriptor <TEntity> GetAggregation(List <AggregationItem> aggregations)
        {
            AggregationContainerDescriptor <TEntity> aggregation = new AggregationContainerDescriptor <TEntity>();

            if (aggregations != null)
            {
                foreach (var item in aggregations)
                {
                    string name = item.Name;
                    switch (item.Type)
                    {
                    case AggregationExpressionType.Count:
                        aggregation.Terms(name, aggr =>
                        {
                            aggr.Field(item.Name)
                            .Size(item.Size)
                            //.Exclude(item.ExcludedItems)
                            .Aggregations(child => GetAggregation(item.Children));

                            if (!string.IsNullOrEmpty(item.SortField))
                            {
                                aggr.Order(new TermsOrder()
                                {
                                    Key   = item.SortField,
                                    Order = item.SortType == "asc" ? SortOrder.Ascending : SortOrder.Descending
                                });
                            }
                            return(aggr);
                        });
                        break;

                    case AggregationExpressionType.Range:
                        SetRangeAggregationContainer(item, aggregation);
                        break;

                    case AggregationExpressionType.Sum:
                        aggregation.Sum(name, d => d.Field(item.Name));
                        break;

                    case AggregationExpressionType.Avg:
                        aggregation.Average(name, d => d.Field(item.Name));
                        break;

                    case AggregationExpressionType.Min:
                        aggregation.Min(name, d => d.Field(item.Name));
                        break;

                    case AggregationExpressionType.Max:
                        aggregation.Max(name, d => d.Field(item.Name));
                        break;

                    default:
                        break;
                    }
                }
            }
            return(aggregation);
        }
 protected IAggregationContainer Combine(AggregationContainerDescriptor <CommitActivity> aggs) => aggs
 .Average("average_per_child", avg => avg.Field(p => p.ConfidenceFactor)) &&
 MaxPerChild(aggs) &&
 MinPerChild(aggs) &&
 null;
示例#3
0
        public static AggregationContainerDescriptor <T> AverageBy <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter) where T : class
        {
            var aggName = fieldGetter.GetAggName(AggType.Average);

            return(agg.Average(aggName, x => x.Field(fieldGetter)));
        }