Geo Centroid Aggregation Usageedit
A metric aggregation that computes the weighted centroid from all coordinate values for a Geo-point datatype field.
Be sure to read the Elasticsearch documentation on Geo Centroid Aggregation
Fluent DSL Exampleedit
s => s .Aggregations(a => a .GeoCentroid("centroid", gb => gb .Field(p => p.Location) ) )
Object Initializer Syntax Exampleedit
new SearchRequest<Project> { Aggregations = new GeoCentroidAggregation("centroid", Infer.Field<Project>(p => p.Location)) }
Example json output.
{ "aggs": { "centroid": { "geo_centroid": { "field": "location" } } } }
Handling Responsesedit
response.ShouldBeValid(); var centroid = response.Aggs.GeoCentroid("centroid"); centroid.Should().NotBeNull(); centroid.Location.Should().NotBeNull(); centroid.Location.Latitude.Should().NotBe(0); centroid.Location.Longitude.Should().NotBe(0);
Geo Centroid Sub Aggregationedit
The geo_centroid
aggregation is more interesting when combined as a sub-aggregation to other bucket aggregations
Fluent DSL Exampleedit
s => s .Aggregations(a => a .Terms("projects", t => t .Field(p => p.Name) .Aggregations(sa => sa .GeoCentroid("centroid", gb => gb .Field(p => p.Location) ) ) ) )
Object Initializer Syntax Exampleedit
new SearchRequest<Project> { Aggregations = new TermsAggregation("projects") { Field = Infer.Field<Project>(p => p.Name), Aggregations = new GeoCentroidAggregation("centroid", Infer.Field<Project>(p => p.Location)) } }
Example json output.
{ "aggs": { "projects": { "terms": { "field": "name" }, "aggs": { "centroid": { "geo_centroid": { "field": "location" } } } } } }
Handling Responsesedit
response.IsValid.Should().BeTrue(); var projects = response.Aggs.Terms("projects"); foreach (var bucket in projects.Buckets) { var centroid = bucket.GeoCentroid("centroid"); centroid.Should().NotBeNull(); centroid.Location.Should().NotBeNull(); centroid.Location.Latitude.Should().NotBe(0); centroid.Location.Longitude.Should().NotBe(0); }