public override AggregationContainerDescriptor <T> ToAggregationContainerDescriptor(AggregationContainerDescriptor <T> aggregationDescriptor) => aggregationDescriptor .Filter(Name, f => f.Filter(f => f.Nested(n => n.Path(Path).Query(q => q.Term(Path + "." + FilterField, FilterValue))))) .Nested(Name, n => n .Path(Path) .Aggregations(a => a .Terms(Name, t => t.Field(Path + "." + Field).Size(100))));
public static AggregationContainerDescriptor <T> GetStatsDescriptor <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter, AggType aggType, Expression <Func <T, bool> > filterRule = null) where T : class { var aggFunc = GetAggregationFunc <T>(fieldGetter, aggType); if (filterRule == null) { return(aggFunc(agg)); } var filterName = filterRule.GenerateFilterName(); agg.Filter(filterName, f => f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>()).Aggregations(aggFunc)); return(agg); }
public static AggregationContainerDescriptor <dynamic> AggregationSelector(this AggregationContainerDescriptor <dynamic> agg, IEnumerable <Facet> aggregationFacets, IDictionary <string, QueryContainer> aggregationFilterQueries = null, QueryContainer dateRangeQuery = null) { foreach (var facet in aggregationFacets) { var name = System.Web.HttpUtility.UrlEncode(facet.Name); var aggFilterQuery = GetFilterQueryForAggregationByName(aggregationFilterQueries, facet.Name); if (facet.ContainsTaxonomy) { // Facet with taxonomy will use named filters with query match queries for aggragations agg.Filter(name, q => q .Filter(aq => aggFilterQuery && dateRangeQuery) .Aggregations(childAggs => childAggs .Filters("result", filter => filter.NamedFilters(f => { return(AddNamedFiltersforTaxonomy(facet)); } )) ) ); } else { // Facet without taxonomies will use terms aggregations agg.Filter(name, q => q .Filter(aq => aggFilterQuery && dateRangeQuery) .Aggregations(childAggs => childAggs .Terms("result", ter => ter.Field(facet.Name + ".outbound.value").Size(1000).MinimumDocumentCount(0)) ) ); } } return(agg); }
public static AggregationContainerDescriptor <T> SumBy <T>(this AggregationContainerDescriptor <T> agg, Expression <Func <T, object> > fieldGetter, Expression <Func <T, bool> > filterRule = null) where T : class { var aggName = fieldGetter.GetAggName(AggType.Sum); if (filterRule == null) { return(agg.Sum(aggName, x => x.Field(fieldGetter))); } var filterName = filterRule.GenerateFilterName(); agg.Filter(filterName, f => f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>()) .Aggregations(innerAgg => innerAgg.Sum(aggName, field => field.Field(fieldGetter)))); return(agg); }
public override AggregationContainerDescriptor <T> ToAggregationContainerDescriptor(AggregationContainerDescriptor <T> aggregationDescriptor) { if ((MinValue != null && !string.IsNullOrEmpty(MinValue?.ToString())) || (MaxValue != null && !string.IsNullOrEmpty(MaxValue.ToString()))) { int.TryParse(MinValue?.ToString(), out var minValue); int.TryParse(MaxValue?.ToString(), out var maxValue); return(aggregationDescriptor .Filter(Name, f => f.Filter(f => { QueryContainer query = null; if (minValue > 0 && maxValue > 0) { var values = new List <int>(); for (var i = minValue; i <= maxValue; i++) { values.Add(i); } query = f.Terms(t => t.Field(Field).Terms(values)); } else { if (minValue > 0) { query = f.Term(Field, minValue); } else if (maxValue > 0) { query = f.Term(Field, maxValue); } } return query; })) .Terms(Name, t => t .Field(Field))); } else { return(aggregationDescriptor .Terms(Name, t => t .Field(Field))); } }