示例#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> 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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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)));
        }
示例#7
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;
        }