Beispiel #1
0
        public static int?GetCount <T>(this AggregationsHelper aggs, Expression <Func <T, object> > fieldGetter, Expression <Func <T, object> > filterRule = null)
        {
            var aggName = fieldGetter.GetAggName(AggType.Count);

            if (filterRule == null)
            {
                var itemsTerms = aggs.ValueCount(aggName);
                if (!itemsTerms.Value.HasValue)
                {
                    return(null);
                }
                return((int)itemsTerms.Value);
            }
            else
            {
                var condAggName = filterRule.GenerateFilterName();
                var filterAgg   = aggs.Filter(condAggName);
                var sumAgg      = filterAgg.Sum(aggName);
                if (!sumAgg.Value.HasValue)
                {
                    return(null);
                }
                return((int)sumAgg.Value);
            }
        }
Beispiel #2
0
 protected virtual IEnumerable <BaseFacet> GlobalFacets(IReadOnlyDictionary <string, IAggregate> facets, string facetName)
 {
     var aggregations       = new AggregationsHelper(facets);
     var globalAggregations = new AggregationsHelper(aggregations.Global(facetName).Aggregations);
     var globalFilter       = globalAggregations.Filter(SearchConstants.SearchFacetNames.GlobalFilter);
     var items = globalFilter.Terms(facetName).Buckets.Select(bucket => new BaseFacet {
         Name = bucket.Key, Count = bucket.DocCount ?? default
     });
Beispiel #3
0
        public static AggregationsHelper GetAggregationContainingResult <T>(this AggregationsHelper aggs,
                                                                            Expression <Func <T, object> > filterRule = null)
        {
            if (filterRule == null)
            {
                return(aggs);
            }

            var filterName = filterRule.GenerateFilterName();

            aggs.CheckForAggregationInResult(filterName);
            return(aggs.Filter(filterName));
        }
Beispiel #4
0
        public static K GetFirstBy <T, K>(this AggregationsHelper aggs, Expression <Func <T, K> > fieldGetter, Expression <Func <T, object> > filterRule = null)
        {
            var aggName = fieldGetter.GetAggName(AggType.Sum);

            if (filterRule == null)
            {
                var terms = aggs.Terms(aggName);
                return(Filters.StringToAnything <K>(terms.Items[0].Key));
            }
            else
            {
                var filterName = filterRule.GenerateFilterName();
                var filterAgg  = aggs.Filter(filterName);
                var termsAgg   = filterAgg.Terms(aggName);
                return(Filters.StringToAnything <K>(termsAgg.Items[0].Key));
            }
        }
Beispiel #5
0
        public static K GetSum <T, K>(this AggregationsHelper aggs, Expression <Func <T, K> > fieldGetter, Expression <Func <T, object> > filterRule = null)
        {
            var aggName = fieldGetter.GetAggName(AggType.Sum);

            if (filterRule == null)
            {
                var sumAggs = aggs.Sum(aggName);
                return(ValueAsUndType <K>(sumAggs));
            }
            else
            {
                var filterName = filterRule.GenerateFilterName();
                var filterAgg  = aggs.Filter(filterName);
                var sumAgg     = filterAgg.Sum(aggName);

                return(ValueAsUndType <K>(sumAgg));
            }
        }
Beispiel #6
0
        public static int GetCardinality <T>(this AggregationsHelper aggs, Expression <Func <T, object> > fieldGetter, Expression <Func <T, object> > filterRule = null)
        {
            var         aggName = fieldGetter.GetAggName(AggType.Cardinality);
            ValueMetric itemsTerms;

            if (filterRule == null)
            {
                itemsTerms = aggs.Cardinality(aggName);
            }
            else
            {
                var filterName = filterRule.GenerateFilterName();
                var filterAgg  = aggs.Filter(filterName);
                itemsTerms = filterAgg.Cardinality(aggName);
            }

            if (itemsTerms?.Value == null)
            {
                throw new InvalidOperationException("Cardinality not available");
            }

            return((int)itemsTerms.Value.Value);
        }