Skip to content

Commit 100f87d

Browse files
committed
fix #931 Percentiles aggregation parser did not fully read the json to completion causing adjecent buckets not to be properly parsed as well
1 parent 0df964e commit 100f87d

File tree

3 files changed

+148
-0
lines changed

3 files changed

+148
-0
lines changed

Diff for: src/Nest/Resolvers/Converters/Aggregations/AggregationConverter.cs

+1
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ private IAggregation GetPercentilesMetricAggregation(JsonReader reader, JsonSeri
110110
reader.Read();
111111
}
112112
metric.Items = percentileItems;
113+
reader.Read();
113114
return metric;
114115
}
115116

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
using System.Linq;
2+
using FluentAssertions;
3+
using Nest.Tests.MockData.Domain;
4+
using NUnit.Framework;
5+
6+
namespace Nest.Tests.Integration.Aggregations
7+
{
8+
[TestFixture]
9+
public class CombinationTests : IntegrationTests
10+
{
11+
[Test]
12+
public void Percentiles()
13+
{
14+
var results = this.Client.Search<ElasticsearchProject>(s => s
15+
.Size(0)
16+
.Aggregations(a => a
17+
.Stats("stats_agg", t=>t.Field(p=>p.LOC))
18+
.Percentiles("bucket_agg", m => m
19+
.Field(p => p.IntValues)
20+
.Percentages(97,99,99.9)
21+
)
22+
)
23+
);
24+
var percentilesAgg = results.Aggs.Percentiles("bucket_agg");
25+
percentilesAgg.Should().NotBeNull();
26+
percentilesAgg.Items.Should().NotBeEmpty().And.HaveCount(3);
27+
28+
var statsBucket = results.Aggs.Stats("stats_agg");
29+
statsBucket.Should().NotBeNull();
30+
statsBucket.Sum.Should().BeGreaterThan(1);
31+
}
32+
33+
[Test]
34+
public void Terms()
35+
{
36+
var results = this.Client.Search<ElasticsearchProject>(s => s
37+
.Size(0)
38+
.Aggregations(a => a
39+
.Terms("stats_agg", t=>t.Field(p=>p.Name))
40+
.Percentiles("bucket_agg", m => m
41+
.Field(p => p.IntValues)
42+
.Percentages(97,99,99.9)
43+
)
44+
)
45+
);
46+
var percentilesAgg = results.Aggs.Percentiles("bucket_agg");
47+
percentilesAgg.Should().NotBeNull();
48+
percentilesAgg.Items.Should().NotBeEmpty().And.HaveCount(3);
49+
50+
var statsBucket = results.Aggs.Terms("stats_agg");
51+
statsBucket.Should().NotBeNull();
52+
statsBucket.Items.Should().NotBeEmpty();
53+
}
54+
55+
[Test]
56+
public void Stats()
57+
{
58+
var results = this.Client.Search<ElasticsearchProject>(s => s
59+
.Size(0)
60+
.Aggregations(a => a
61+
.Percentiles("bucket_agg", m => m
62+
.Field(p => p.IntValues)
63+
.Percentages(97,99,99.9)
64+
)
65+
.Stats("stats_agg", t=>t.Field(p=>p.LOC))
66+
)
67+
);
68+
var percentilesAgg = results.Aggs.Percentiles("bucket_agg");
69+
percentilesAgg.Should().NotBeNull();
70+
percentilesAgg.Items.Should().NotBeEmpty().And.HaveCount(3);
71+
72+
var statsBucket = results.Aggs.Stats("stats_agg");
73+
statsBucket.Should().NotBeNull();
74+
statsBucket.Sum.Should().BeGreaterThan(1);
75+
}
76+
77+
[Test]
78+
public void DateHistogram()
79+
{
80+
var results = this.Client.Search<ElasticsearchProject>(s => s
81+
.Size(0)
82+
.Aggregations(a => a
83+
.DateHistogram("bucket_agg", m => m
84+
.Field(p => p.StartedOn)
85+
.Interval("1d")
86+
)
87+
.Stats("stats_agg", t=>t.Field(p=>p.LOC))
88+
)
89+
);
90+
var dateHisto = results.Aggs.DateHistogram("bucket_agg");
91+
dateHisto.Should().NotBeNull();
92+
dateHisto.Items.Should().NotBeEmpty();
93+
94+
var statsBucket = results.Aggs.Stats("stats_agg");
95+
statsBucket.Should().NotBeNull();
96+
statsBucket.Sum.Should().BeGreaterThan(1);
97+
}
98+
99+
[Test]
100+
public void DateHistogramMultiple()
101+
{
102+
var results = this.Client.Search<ElasticsearchProject>(s => s
103+
.Size(0)
104+
.Aggregations(a => a
105+
.DateHistogram("date1", m => m
106+
.Field(p => p.StartedOn)
107+
.Interval("1d")
108+
)
109+
.DateHistogram("date2", m => m
110+
.Field(p => p.StartedOn)
111+
.Interval("1d")
112+
)
113+
)
114+
);
115+
var dateHisto = results.Aggs.DateHistogram("date1");
116+
dateHisto.Should().NotBeNull();
117+
dateHisto.Items.Should().NotBeEmpty();
118+
119+
var statsBucket = results.Aggs.DateHistogram("date2");
120+
statsBucket.Should().NotBeNull();
121+
dateHisto.Items.Should().NotBeEmpty();
122+
}
123+
}
124+
}

Diff for: src/Tests/Nest.Tests.Integration/Aggregations/StatsAggregationTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,30 @@ public void Average()
4141
statsBucket.Count.Should().BeGreaterThan(1);
4242
statsBucket.Sum.Should().BeGreaterThan(1);
4343
}
44+
45+
[Test]
46+
public void StatsAllowsOtherAggsOnTheSameLevel()
47+
{
48+
var results = this.Client.Search<ElasticsearchProject>(s => s
49+
.Size(0)
50+
.Aggregations(a=>a
51+
.Stats("stats_agg", t=>t.Field(p=>p.LOC))
52+
.Percentiles("bucket_agg", m => m
53+
.Field(p => p.IntValues)
54+
.Percentages(97,99,99.9)
55+
)
56+
)
57+
);
58+
results.IsValid.Should().BeTrue();
59+
var percentilesAgg = results.Aggs.Percentiles("bucket_agg");
60+
percentilesAgg.Should().NotBeNull();
61+
percentilesAgg.Items.Should().NotBeEmpty().And.HaveCount(3);
4462

63+
var statsBucket = results.Aggs.Stats("stats_agg");
64+
statsBucket.Should().NotBeNull();
65+
statsBucket.Count.Should().BeGreaterThan(1);
66+
statsBucket.Sum.Should().BeGreaterThan(1);
67+
}
4568
[Test]
4669
public void ExtendedStats()
4770
{

0 commit comments

Comments
 (0)