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); }
/// <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); }
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); }
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())); } }