示例#1
0
        public override AggregationContainerDescriptor <T> ToAggregationContainerDescriptor(AggregationContainerDescriptor <T> aggregationDescriptor)
        {
            var fromRanges = new List <Func <AggregationRangeDescriptor, IAggregationRange> >();
            var toRanges   = new List <Func <AggregationRangeDescriptor, IAggregationRange> >();

            foreach (var valueOption in Values)
            {
                var value = double.Parse(valueOption.ToString());
                fromRanges.Add(r =>
                {
                    r.From(value)
                    .To(9999)
                    .Key(value.ToString());

                    return(r);
                });
                toRanges.Add(r =>
                {
                    r.From(0)
                    .To(value)
                    .Key(value.ToString());

                    return(r);
                });
            }

            aggregationDescriptor.Range("Min" + Name, r => r.Field(MinField).Ranges(fromRanges.ToArray()));
            aggregationDescriptor.Range("Max" + Name, r => r.Field(MaxField).Ranges(toRanges.ToArray()));

            return(aggregationDescriptor);
        }
示例#2
0
        /// <summary>
        /// 获取聚合
        /// </summary>
        /// <param name="agg"></param>
        /// <param name="ci"></param>
        /// <returns></returns>
        private IAggregationContainer Get_Agg(AggregationContainerDescriptor <T> agg, QueryDes qd)
        {
            var ls = qd.Aggs;

            if (ls == null)
            {
                return(agg);
            }

            foreach (var s in ls)
            {
                switch (s)
                {
                case 1:
                    agg.Terms("m_area", t => t.Field("m_area").Size(33));
                    break;

                case 2:
                    agg.Range("od_regm", r => r.Field("od_regm").Ranges(rs => rs.To(100), rs => rs.From(100).To(500), rs => rs.From(500).To(1000),
                                                                        rs => rs.From(1000)));
                    break;

                case 3:
                    agg.DateHistogram("od_regdate", t => t.Field("od_regdate").Interval(DateInterval.Year)
                                      .MinimumDocumentCount(1).ExtendedBounds(new DateTime(1900, 1, 1), DateTime.Now));
                    break;
                }
            }
            return(agg);
        }
示例#3
0
        private static IAggregationContainer GetAggContainer(AggregationContainerDescriptor <Person> agg, SearchParam p)
        {
            if (p.aggs != null)
            {
                foreach (var a in p.aggs)
                {
                    switch (a)
                    {
                    case PersonEnum.age:
                        agg.Range("age", r => r.Field(f => f.age).Ranges(rs => rs.To(20),
                                                                         rs => rs.From(20).To(30),
                                                                         rs => rs.From(30).To(40),
                                                                         rs => rs.From(40).To(50),
                                                                         rs => rs.From(50).To(60),
                                                                         rs => rs.From(60)));
                        break;

                    case PersonEnum.graduate:
                        agg.DateHistogram("graduate", d => d.Field(f => f.graduate)
                                          .Interval(DateInterval.Year)
                                          .MinimumDocumentCount(1)
                                          .ExtendedBounds("1980", "2050"));
                        break;

                    case PersonEnum.isMan:
                        agg.Terms("isMan", t => t.Field(f => f.isMan));
                        break;

                    case PersonEnum.city:
                        agg.Terms("city", t => t.Field(f => f.city));
                        break;
                    }
                }
            }
            return(agg);
        }
示例#4
0
        private void SetRangeAggregationContainer(AggregationItem currentItem, AggregationContainerDescriptor <TEntity> aggregation)
        {
            string name = currentItem.Name.Split('.').LastOrDefault();

            if (currentItem.RangesDate != null && currentItem.RangesDate.Count() > 0)
            {
                IList <IDateRangeExpression> dataRanges = new List <IDateRangeExpression>();
                foreach (var item in currentItem.RangesDate)
                {
                    var range = new DateRangeExpression()
                    {
                        Key = currentItem.Name
                    };
                    range.From = item.From;
                    range.To   = item.To;
                    dataRanges.Add(range);
                }
                aggregation.DateRange(name, d => d.Field(currentItem.Name).Ranges(dataRanges.ToArray()));
            }
            else if (currentItem.Ranges != null && currentItem.Ranges.Count() > 0)
            {
                List <Func <RangeDescriptor, IRange> > funcs = new List <Func <RangeDescriptor, IRange> >();
                foreach (var item in currentItem.Ranges)
                {
                    funcs.Add(d =>
                    {
                        d.From(item.From)
                        .To(item.To)
                        .Key(currentItem.Name);

                        return(d);
                    });
                }
                aggregation.Range(name, f => f.Field(currentItem.Name).Ranges(funcs.ToArray()));
            }
        }