示例#1
0
        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);
        }
示例#2
0
        public static AggregationDescriptor <T> CardinalityBy <T>(this AggregationDescriptor <T> agg, Expression <Func <T, object> > fieldGetter, Expression <Func <T, bool> > filterRule = null) where T : class
        {
            var aggName = fieldGetter.GetAggName(AggType.Cardinality);

            if (filterRule == null)
            {
                return(agg.Cardinality(aggName, x => x.Field(fieldGetter)));
            }

            var filterName = filterRule.GenerateFilterName();

            agg.Filter(filterName,
                       f =>
                       f.Filter(fd => filterRule.Body.GenerateFilterDescription <T>())
                       .Aggregations(innerAgg => innerAgg.Cardinality(aggName, field => field.Field(fieldGetter))));

            return(agg);
        }
示例#3
0
        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;
        }