Skip to content

Commit c01ec36

Browse files
codebrainrusscam
authored andcommitted
Support geotile_grid aggregation in composite agg sources. (#4271)
1 parent 4a12b53 commit c01ec36

File tree

3 files changed

+80
-3
lines changed

3 files changed

+80
-3
lines changed

src/Nest/Aggregations/Bucket/Composite/CompositeAggregationSource.cs

+14
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ public CompositeAggregationSourcesDescriptor<T> DateHistogram(string name,
9898
Func<DateHistogramCompositeAggregationSourceDescriptor<T>, IDateHistogramCompositeAggregationSource> selector
9999
) =>
100100
Assign(selector?.Invoke(new DateHistogramCompositeAggregationSourceDescriptor<T>(name)), (a, v) => a.Add(v));
101+
102+
/// <inheritdoc cref="IGeoTileGridCompositeAggregationSource" />
103+
public CompositeAggregationSourcesDescriptor<T> GeoTileGrid(string name,
104+
Func<GeoTileGridCompositeAggregationSourceDescriptor<T>, IGeoTileGridCompositeAggregationSource> selector
105+
) =>
106+
Assign(selector?.Invoke(new GeoTileGridCompositeAggregationSourceDescriptor<T>(name)), (a, v) => a.Add(v));
101107
}
102108

103109
/// <inheritdoc cref="ICompositeAggregationSource" />
@@ -154,6 +160,9 @@ public void Serialize(ref JsonWriter writer, ICompositeAggregationSource value,
154160
case IHistogramCompositeAggregationSource histogramCompositeAggregationSource:
155161
Serialize(ref writer, histogramCompositeAggregationSource, formatterResolver);
156162
break;
163+
case IGeoTileGridCompositeAggregationSource geoTileGridCompositeAggregationSource:
164+
Serialize(ref writer, geoTileGridCompositeAggregationSource, formatterResolver);
165+
break;
157166
default:
158167
Serialize(ref writer, value, formatterResolver);
159168
break;
@@ -176,6 +185,7 @@ IJsonFormatterResolver formatterResolver
176185
{ "terms", 0 },
177186
{ "date_histogram", 1 },
178187
{ "histogram", 2 },
188+
{ "geotile_grid", 3 },
179189
};
180190

181191
public ICompositeAggregationSource Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
@@ -208,6 +218,10 @@ public ICompositeAggregationSource Deserialize(ref JsonReader reader, IJsonForma
208218
compositeAggregationSource = formatterResolver.GetFormatter<HistogramCompositeAggregationSource>()
209219
.Deserialize(ref reader, formatterResolver);
210220
break;
221+
case 3:
222+
compositeAggregationSource = formatterResolver.GetFormatter<GeoTileGridCompositeAggregationSource>()
223+
.Deserialize(ref reader, formatterResolver);
224+
break;
211225
}
212226
}
213227
else
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using System.Runtime.Serialization;
3+
4+
namespace Nest
5+
{
6+
/// <summary>
7+
/// A values source that is equivalent to a simple Geo aggregation.
8+
/// </summary>
9+
public interface IGeoTileGridCompositeAggregationSource : ICompositeAggregationSource
10+
{
11+
/// <summary>
12+
/// The zoom of the key used to define cells/buckets in the results.
13+
/// </summary>
14+
[DataMember(Name ="precision")]
15+
GeoTilePrecision? Precision { get; set; }
16+
}
17+
18+
/// <inheritdoc cref="IGeoTileGridCompositeAggregationSource" />
19+
public class GeoTileGridCompositeAggregationSource : CompositeAggregationSourceBase, IGeoTileGridCompositeAggregationSource
20+
{
21+
public GeoTileGridCompositeAggregationSource(string name) : base(name) { }
22+
23+
/// <inheritdoc />
24+
public GeoTilePrecision? Precision { get; set; }
25+
26+
/// <inheritdoc />
27+
protected override string SourceType => "geotile_grid";
28+
}
29+
30+
/// <inheritdoc cref="IGeoTileGridCompositeAggregationSource" />
31+
public class GeoTileGridCompositeAggregationSourceDescriptor<T>
32+
: CompositeAggregationSourceDescriptorBase<GeoTileGridCompositeAggregationSourceDescriptor<T>, IGeoTileGridCompositeAggregationSource, T>,
33+
IGeoTileGridCompositeAggregationSource
34+
{
35+
public GeoTileGridCompositeAggregationSourceDescriptor(string name) : base(name, "geotile_grid") { }
36+
37+
GeoTilePrecision? IGeoTileGridCompositeAggregationSource.Precision { get; set; }
38+
39+
/// <inheritdoc cref="IGeoTileGridCompositeAggregationSource.Precision" />
40+
public GeoTileGridCompositeAggregationSourceDescriptor<T> Precision(GeoTilePrecision? precision) =>
41+
Assign(precision, (a, v) => a.Precision = v);
42+
}
43+
}

src/Tests/Tests/Aggregations/Bucket/Composite/CompositeAggregationUsageTests.cs

+23-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ namespace Tests.Aggregations.Bucket.Composite
2828
*
2929
* Be sure to read the Elasticsearch documentation on {ref_current}/search-aggregations-bucket-composite-aggregation.html[Composite Aggregation].
3030
*/
31-
[SkipVersion("<6.1.0", "Composite Aggregation is only available in Elasticsearch 6.1.0+")]
31+
[SkipVersion("<7.5.0", "Geo tile grid composite agg added in 7.5.0, rest available in 6.1.0+")]
3232
public class CompositeAggregationUsageTests : ProjectsOnlyAggregationUsageTestBase
3333
{
3434
public CompositeAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) : base(i, usage) { }
@@ -73,6 +73,17 @@ public CompositeAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) :
7373
}
7474
}
7575
},
76+
new
77+
{
78+
geo = new
79+
{
80+
geotile_grid = new
81+
{
82+
field = "locationPoint",
83+
precision = 12
84+
}
85+
}
86+
},
7687
}
7788
},
7889
aggs = new
@@ -109,6 +120,10 @@ public CompositeAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) :
109120
.Field(f => f.RequiredBranches)
110121
.Interval(1)
111122
)
123+
.GeoTileGrid("geo", h => h
124+
.Field(f => f.LocationPoint)
125+
.Precision(GeoTilePrecision.Precision12)
126+
)
112127
)
113128
.Aggregations(childAggs => childAggs
114129
.Nested("project_tags", n => n
@@ -138,6 +153,11 @@ public CompositeAggregationUsageTests(ReadOnlyCluster i, EndpointUsage usage) :
138153
{
139154
Field = Field<Project>(f => f.RequiredBranches),
140155
Interval = 1
156+
},
157+
new GeoTileGridCompositeAggregationSource("geo")
158+
{
159+
Field = Field<Project>(f => f.LocationPoint),
160+
Precision = GeoTilePrecision.Precision12
141161
}
142162
},
143163
Aggregations = new NestedAggregation("project_tags")
@@ -164,8 +184,8 @@ protected override void ExpectResponse(ISearchResponse<Project> response)
164184
composite.AfterKey.Should().NotBeNull();
165185
if (TestConfiguration.Instance.InRange(">=6.3.0"))
166186
composite.AfterKey.Should()
167-
.HaveCount(3)
168-
.And.ContainKeys("branches", "started", "branch_count");
187+
.HaveCount(4)
188+
.And.ContainKeys("branches", "started", "branch_count", "geo");
169189
foreach (var item in composite.Buckets)
170190
{
171191
var key = item.Key;

0 commit comments

Comments
 (0)