public void TermsAggregation_RangeAggregation_FromHelper()
        {
            var agg = AggregationsHelper.RangeAggregation <Event, double?>(x => x.Duration,
                                                                           new RangeAggrValue <double?> {
                From = 2 * 60, Key = "Above120"
            });

            agg.Aggregations = new Dictionary <string, IAggregation>();
            agg.CardinalityAggregation <Event>(ci => ci.AssetGuid).TopHitsAggregation(ParameterHelper.Sort(
                                                                                          new KeyValuePair <Expression <Func <Event, object> >, AggsOrderDirection>(ic => ic.Start,
                                                                                                                                                                    AggsOrderDirection.Desc)), ParameterHelper.Excludes <Event>(ic => ic.StSrid));
            var termsAgg = AggregationsHelper.TermsAggregation <Event>(x => x.AssetGuid, 1000, null, agg,
                                                                       AggregationsHelper.BucketSelector("count", "nested._bucket_count", "params.count > 0"));


            var q2 = new Query <Event>().Match("EarthFault", e => e.Type)
                     .DateHistogramAggregation(x => x.Start, "week", 1, termsAgg)
                     .SetSize(0);

            var nested = q2.Aggregations.FirstOrDefault().Value.Aggregations.FirstOrDefault().Value.Aggregations.FirstOrDefault().Key;
            var n      = q2.Aggregations.FirstOrDefault().Value.Aggregations.FirstOrDefault().Key;

            Assert.AreEqual("nested", nested);
            Assert.AreEqual("nested", n);
        }
        public void Aggregations_Nested_Terms_Range()
        {
            var q1 = new Query <IndexedClass>().NestedAggregation(
                ic => ic.Children,
                AggregationsHelper.TermsAggregation <IndexedClass>(x => x.Children.PropertyName(p => p.AString), 10,
                                                                   new AggsOrder(AggsOrderBy.Key, AggsOrderDirection.Desc),
                                                                   AggregationsHelper.SumAggregation <IndexedClass>(sum => sum.SomeNumber)),
                AggregationsHelper.RangeAggregation <IndexedClass, int?>(
                    x => x.Children.PropertyName(p => p.SomeNumber), new RangeAggrValue <int?>
            {
                Key = "SomeKey",
                To  = 24
            }),
                AggregationsHelper.RangeAggregation <IndexedClass, int?>(
                    x => x.Children.PropertyName(p => p.SomeNumber),
                    new RangeAggrValue <int?>
            {
                Key = "SomeKey1",
                To  = 12,
            },
                    new RangeAggrValue <int?>
            {
                Key  = "SomeKey2",
                From = 31,
            })
                );

            var json = q1.ToJson();

            Assert.AreEqual(
                "{\"query\":{\"bool\":{\"should\":[{\"type\":{\"value\":\"h73.Elastic.Search.Tests.IndexedClass\"}},{\"type\":{\"value\":\"h73.Elastic.Search.Tests.InheritedGenericIndexedClass`1\"}},{\"type\":{\"value\":\"h73.Elastic.Search.Tests.InheritedIndexedClass\"}}],\"minimum_should_match\":1}},\"aggs\":{\"nested_Children_0\":{\"nested\":{\"path\":\"Children\"},\"aggs\":{\"nested\":{\"terms\":{\"field\":\"Children.AString\",\"size\":10,\"order\":{\"_key\":\"desc\"}},\"aggs\":{\"Sum\":{\"sum\":{\"field\":\"SomeNumber\"}},\"nested\":{\"range\":{\"ranges\":[{\"key\":\"SomeKey\",\"to\":24}],\"field\":\"Children.SomeNumber\"},\"aggs\":{\"nested\":{\"range\":{\"ranges\":[{\"key\":\"SomeKey1\",\"to\":12},{\"key\":\"SomeKey2\",\"from\":31}],\"field\":\"Children.SomeNumber\"}}}}}}}}}}",
                json);
        }
        public void BucketSelector_Terms()
        {
            var agg = AggregationsHelper.RangeAggregation <IndexedClass, double?>(x => x.SomeNumber,
                                                                                  new RangeAggrValue <double?> {
                From = 2 * 60, Key = "Above120"
            });

            agg.Aggregations = new Dictionary <string, IAggregation>();
            agg.CardinalityAggregation <IndexedClass>(ci => ci.ObjectId).TopHitsAggregation(ParameterHelper.Sort(
                                                                                                new KeyValuePair <Expression <Func <IndexedClass, object> >, AggsOrderDirection>(ic => ic.DateTimeNotNullable,
                                                                                                                                                                                 AggsOrderDirection.Desc)), ParameterHelper.Excludes <IndexedClass>(ic => ic.SomeNumber));



            var q2 = new Query <IndexedClass>(true).Match("EarthFault", e => e.AString)
                     .TermsAggregation(x => x.ObjectId, 100, agg, AggregationsHelper.BucketSelector("count", "nested._bucket_count", "params.count > 0"))
                     .SetSize(0);

            Assert.AreEqual("nested", q2.Aggregations.FirstOrDefault().Value.Aggregations.Keys.FirstOrDefault());
        }