private AggregationDescriptor <PersistentEvent> BuildAggregations(AggregationDescriptor <PersistentEvent> aggregation, IEnumerable <FieldAggregation> fields) { foreach (var field in fields) { switch (field.Type) { case FieldAggregationType.Average: aggregation.Average(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Distinct: aggregation.Cardinality(field.Key, a => (field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)).PrecisionThreshold(100)); break; case FieldAggregationType.Sum: aggregation.Sum(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Min: aggregation.Min(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Max: aggregation.Max(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Last: // TODO: Populate with the last value. break; case FieldAggregationType.Term: var termField = field as TermFieldAggregation; if (termField == null) { throw new InvalidOperationException("term aggregation must be of type TermFieldAggregation"); } aggregation.Terms(field.Key, t => { var tad = t.Field(field.Field); if (!String.IsNullOrEmpty(termField.ExcludePattern)) { tad.Exclude(termField.ExcludePattern); } if (!String.IsNullOrEmpty(termField.IncludePattern)) { tad.Include(termField.IncludePattern); } return(tad); }); break; default: throw new InvalidOperationException($"Unknown FieldAggregation type: {field.Type}"); } } return(aggregation); }
public static AggregationDescriptor <T> GroupBy <T>(this AggregationDescriptor <T> innerAggregation, String key) where T : class { AggregationDescriptor <T> v = new AggregationDescriptor <T>(); v.Terms(key, tr => { TermsAggregationDescriptor <T> trmAggDescriptor = new TermsAggregationDescriptor <T>(); trmAggDescriptor.Field(key); trmAggDescriptor.Size(int.MaxValue); return(trmAggDescriptor.Aggregations(x => innerAggregation)); }); return(v); }
public static AggregationDescriptor <T> GroupBy <T>(this AggregationDescriptor <T> innerAggregation, Expression <Func <T, Object> > fieldGetter) where T : class { AggregationDescriptor <T> v = new AggregationDescriptor <T>(); var fieldName = fieldGetter.GetAggName(AggType.GroupBy); v.Terms(fieldName, tr => { TermsAggregationDescriptor <T> trmAggDescriptor = new TermsAggregationDescriptor <T>(); trmAggDescriptor.Field(fieldGetter); trmAggDescriptor.Size(int.MaxValue); return(trmAggDescriptor.Aggregations(x => innerAggregation)); }); return(v); }
public static AggregationDescriptor <T> FirstBy <T>(this AggregationDescriptor <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.Terms(aggName, x => x.Field(fieldGetter))); } var filterName = filterRule.GenerateFilterName(); agg.Filter(filterName, f => f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>()) .Aggregations(innerAgg => innerAgg.Terms(aggName, field => field.Field(fieldGetter)))); return(agg); }
private AggregationDescriptor <T> GetAggregationDescriptor <T>(object query) where T : class { var facetQuery = query as IFacetQuery; if (facetQuery == null || facetQuery.FacetFields.Count == 0) { return(null); } var descriptor = new AggregationDescriptor <T>(); foreach (var t in facetQuery.FacetFields) { descriptor = descriptor.Terms(t.Field, s => s.Field(t.Field).Size(t.Size ?? 100)); } return(descriptor); }
public static AggregationDescriptor <T> DistinctBy <T>(this AggregationDescriptor <T> agg, Expression <Func <T, object> > fieldGetter) where T : class { var aggName = fieldGetter.GetAggName(AggType.Distinct); return(agg.Terms(aggName, x => x.Field(fieldGetter).Size(int.MaxValue))); }
private AggregationDescriptor<PersistentEvent> BuildAggregations(AggregationDescriptor<PersistentEvent> aggregation, IEnumerable<FieldAggregation> fields) { foreach (var field in fields) { switch (field.Type) { case FieldAggregationType.Average: aggregation.Average(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Distinct: aggregation.Cardinality(field.Key, a => (field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)).PrecisionThreshold(100)); break; case FieldAggregationType.Sum: aggregation.Sum(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Min: aggregation.Min(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Max: aggregation.Max(field.Key, a => field.DefaultValueScript == null ? a.Field(field.Field) : a.Script(field.DefaultValueScript)); break; case FieldAggregationType.Last: // TODO: Populate with the last value. break; case FieldAggregationType.Term: var termField = field as TermFieldAggregation; if (termField == null) throw new InvalidOperationException("term aggregation must be of type TermFieldAggregation"); aggregation.Terms(field.Key, t => { var tad = t.Field(field.Field); if (!String.IsNullOrEmpty(termField.ExcludePattern)) tad.Exclude(termField.ExcludePattern); if (!String.IsNullOrEmpty(termField.IncludePattern)) tad.Include(termField.IncludePattern); return tad; }); break; default: throw new InvalidOperationException($"Unknown FieldAggregation type: {field.Type}"); } } return aggregation; }