コード例 #1
0
ファイル: ESAccess.cs プロジェクト: xkandj/proj-15-pks1.1
        /// <summary>
        /// 构建查询描述器
        /// </summary>
        /// <param name="query"></param>
        /// <param name="sort"></param>
        /// <param name="fields"></param>
        /// <param name="aggs"></param>
        /// <param name="from"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public SearchDescriptor <T> BuildSearchDescriptor(QueryContainer query, SortDescriptor <T> sort, ISourceFilter fields,
                                                          IAggregationContainer aggs, int from = 0, int size = 10)
        {
            var searchdesc = new SearchDescriptor <T>()
                             .Index(EsIndex)
                             .Type(EsType)
                             .From(from)
                             .Size(size);

            if (query != null)
            {
                searchdesc = searchdesc.Query(q => query);
            }
            if (sort != null)
            {
                searchdesc = searchdesc.Sort(s => sort);
            }
            if (fields != null)
            {
                searchdesc = searchdesc.Source(s => fields);
            }
            if (aggs != null)
            {
                searchdesc = searchdesc.Aggregations(a => aggs);
            }

            return(searchdesc);
        }
コード例 #2
0
        private AggregationDescriptor <T> _SetInnerAggregation <TAggregation>(
            string key,
            Func <TAggregation, TAggregation> selector
            , Action <IAggregationContainer, TAggregation> setter
            )
            where TAggregation : IAggregationDescriptor, new()

        {
            var innerDescriptor = selector(new TAggregation());
            var descriptor      = new AggregationDescriptor <T>();

            setter(descriptor, innerDescriptor);
            var bucket = innerDescriptor as IBucketAggregator;
            IAggregationContainer self = this;

            if (self.Aggregations == null)
            {
                self.Aggregations = new Dictionary <string, IAggregationContainer>();
            }

            if (bucket != null && bucket.Aggregations.HasAny())
            {
                IAggregationContainer d = descriptor;
                d.Aggregations = bucket.Aggregations;
            }
            self.Aggregations[key] = descriptor;
            return(this);
        }
コード例 #3
0
 private void Accept(IAggregationVisitor visitor, IAggregationContainer aggregation, AggregationVisitorScope scope = AggregationVisitorScope.Aggregation)
 {
     if (aggregation == null)
     {
         return;
     }
     visitor.Scope = scope;
     aggregation.Accept(visitor);
 }
コード例 #4
0
 public void Walk(IAggregationContainer aggregation, IAggregationVisitor visitor)
 {
     visitor.Visit(aggregation);
     AcceptAggregation(aggregation.Average, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.AverageBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.BucketScript, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.BucketSort, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.BucketSelector, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Cardinality, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Children, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.CumulativeSum, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.DateHistogram, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.DateRange, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Derivative, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.ExtendedStats, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Filter, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Filters, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.GeoBounds, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.GeoDistance, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.GeoHash, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Global, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Histogram, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.IpRange, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Max, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.MaxBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Min, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.MinBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Missing, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.MovingAverage, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Nested, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.PercentileRanks, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Percentiles, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Range, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.ReverseNested, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Sampler, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.ScriptedMetric, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.SerialDifferencing, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.SignificantTerms, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.SignificantText, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.Stats, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Sum, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.SumBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.StatsBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.ExtendedStatsBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.PercentilesBucket, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Terms, visitor, (v, d) => { v.Visit(d); this.Accept(v, d.Aggregations); });
     AcceptAggregation(aggregation.TopHits, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.ValueCount, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.GeoCentroid, visitor, (v, d) => v.Visit(d));
     AcceptAggregation(aggregation.Composite, visitor, (v, d) => v.Visit(d));
 }
コード例 #5
0
        /// <summary>
        /// Fluent methods do not assign to properties on `this` directly but on IAggregationContainers inside `this.Aggregations[string, IContainer]
        /// </summary>
        private AggregationContainerDescriptor <T> _SetInnerAggregation <TAggregator, TAggregatorInterface>(
            string key,
            Func <TAggregator, TAggregatorInterface> selector
            , Action <IAggregationContainer, TAggregatorInterface> assignToProperty
            )
            where TAggregator : IAggregation, TAggregatorInterface, new()
            where TAggregatorInterface : IAggregation
        {
            var aggregator = selector(new TAggregator());

            //create new isolated container for new aggregator and assign to the right property
            var container = new AggregationContainer()
            {
                Meta = aggregator.Meta
            };

            assignToProperty(container, aggregator);

            //create aggregations dictionary on `this` if it does not exist already
            IAggregationContainer self = this;

            if (self.Aggregations == null)
            {
                self.Aggregations = new Dictionary <string, IAggregationContainer>();
            }

            //if the aggregator is a bucket aggregator (meaning it contains nested aggregations);
            var bucket = aggregator as IBucketAggregation;

            if (bucket != null && bucket.Aggregations.HasAny())
            {
                //make sure we copy those aggregations to the isolated container's
                //own .Aggregations container (the one that gets serialized to "aggs")
                IAggregationContainer d = container;
                d.Aggregations = bucket.Aggregations;
            }
            //assign the aggregations container under Aggregations ("aggs" in the json)
            self.Aggregations[key] = container;
            return(this);
        }
コード例 #6
0
 public virtual void Visit(IAggregationContainer aggregationContainer)
 {
 }
コード例 #7
0
		public virtual void Visit(IAggregationContainer aggregationContainer)
		{
		}