Chapter 38. Geo-aggregations
Although filtering or scoring results by geolocation is useful, it is often more useful to be able to present information to the user on a map. A search may return way too many results to be able to display each geo-point individually, but geo-aggregations can be used to cluster geo-points into more manageable buckets.
Three aggregations work with fields of type geo_point
:
geo_distance
-
Groups documents into concentric circles around a central point.
geohash_grid
-
Groups documents by geohash cell, for display on a map.
geo_bounds
-
Returns the
lat/lon
coordinates of a bounding box that would encompass all of the geo-points. This is useful for choosing the correct zoom level when displaying a map.
geo_distance Aggregation
The geo_distance
agg is useful for searches such as
to “find all pizza restaurants within 1km of me.” The search results
should, indeed, be limited to the 1km radius specified by the user, but we can
add “another result found within 2km”:
GET
/attractions/restaurant/_search
{
"query"
:
{
"filtered"
:
{
"query"
:
{
"match"
:
{
"name"
:
"pizza"
}
},
"filter"
:
{
"geo_bounding_box"
:
{
"location"
:
{
"top_left"
:
{
"lat"
:
40
,
8,
"lon"
:
-74.1
}
,
"bottom_right"
:
{
"lat"
:
40.4
,
"lon"
:
-73.7
}
}
}
}
}
},
"aggs"
:
{
"per_ring"
:
{
"geo_distance"
:
Get Elasticsearch: The Definitive Guide now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.