Geo Bounding Box Queryedit
A query allowing to filter hits based on a point location using a bounding box. Assuming the following indexed document:
{ "pin" : { "location" : { "lat" : 40.12, "lon" : -71.34 } } }
Then the following simple query can be executed with a
geo_bounding_box
filter:
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : { "lat" : 40.73, "lon" : -74.1 }, "bottom_right" : { "lat" : 40.01, "lon" : -71.12 } } } } } }
Query Optionsedit
Option | Description |
---|---|
| Optional name field to identify the filter |
| Set to |
| Set to |
| Set to one of |
Accepted Formatsedit
In much the same way the geo_point type can accept different representation of the geo point, the filter can accept it as well:
Lat Lon As Propertiesedit
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : { "lat" : 40.73, "lon" : -74.1 }, "bottom_right" : { "lat" : 40.01, "lon" : -71.12 } } } } } }
Lat Lon As Arrayedit
Format in [lon, lat]
, note, the order of lon/lat here in order to
conform with GeoJSON.
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : [-74.1, 40.73], "bottom_right" : [-71.12, 40.01] } } } } }
Lat Lon As Stringedit
Format in lat,lon
.
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : "40.73, -74.1", "bottom_right" : "40.01, -71.12" } } } } }
Geohashedit
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : "dr5r9ydj2y73", "bottom_right" : "drj7teegpus6" } } } } }
Verticesedit
The vertices of the bounding box can either be set by top_left
and
bottom_right
or by top_right
and bottom_left
parameters. More
over the names topLeft
, bottomRight
, topRight
and bottomLeft
are supported. Instead of setting the values pairwise, one can use
the simple names top
, left
, bottom
and right
to set the
values separately.
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top" : -74.1, "left" : 40.73, "bottom" : -71.12, "right" : 40.01 } } } } }
geo_point Typeedit
The filter requires the geo_point
type to be set on the relevant
field.
Multi Location Per Documentedit
The filter can work with multiple locations / points per document. Once a single location / point matches the filter, the document will be included in the filter
Typeedit
The type of the bounding box execution by default is set to memory
,
which means in memory checks if the doc falls within the bounding box
range. In some cases, an indexed
option will perform faster (but note
that the geo_point
type must have lat and lon indexed in this case).
Note, when using the indexed option, multi locations per document field
are not supported. Here is an example:
{ "bool" : { "must" : { "match_all" : {} }, "filter" : { "geo_bounding_box" : { "pin.location" : { "top_left" : { "lat" : 40.73, "lon" : -74.1 }, "bottom_right" : { "lat" : 40.10, "lon" : -71.12 } }, "type" : "indexed" } } } }