コード例 #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);
        }
コード例 #2
0
        public static AggregationContainerDescriptor <dynamic> DateAggregationSelector(this AggregationContainerDescriptor <dynamic> agg, IEnumerable <Facet> dateFacets)
        {
            foreach (var dateFacet in dateFacets)
            {
                agg = agg.Min(dateFacet.Name + "_min", ter => ter.Field(dateFacet.Name + ".outbound.value"));
                agg = agg.Max(dateFacet.Name + "_max", ter => ter.Field(dateFacet.Name + ".outbound.value"));
            }

            return(agg);
        }
コード例 #3
0
 private static AggregationContainerDescriptor <CommitActivity> MinPerChild(AggregationContainerDescriptor <CommitActivity> aggs) =>
 aggs.Min("min_per_child", avg => avg.Field(p => p.ConfidenceFactor));
コード例 #4
0
        public static AggregationContainerDescriptor <T> MinBy <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter) where T : class
        {
            var aggName = fieldGetter.GetAggName(AggType.Min);

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