You are looking at documentation for an older release.
Not what you want? See the
current release documentation.
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);
}