123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- [[query-dsl-geo-bounding-box-query]]
- === Geo Bounding Box Query
- A query allowing to filter hits based on a point location using a
- bounding box. Assuming the following indexed document:
- [source,js]
- --------------------------------------------------
- {
- "pin" : {
- "location" : {
- "lat" : 40.12,
- "lon" : -71.34
- }
- }
- }
- --------------------------------------------------
- Then the following simple query can be executed with a
- `geo_bounding_box` filter:
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top_left" : {
- "lat" : 40.73,
- "lon" : -74.1
- },
- "bottom_right" : {
- "lat" : 40.01,
- "lon" : -71.12
- }
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ==== Accepted Formats
- In much the same way the geo_point type can accept different
- representation of the geo point, the filter can accept it as well:
- [float]
- ===== Lat Lon As Properties
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top_left" : {
- "lat" : 40.73,
- "lon" : -74.1
- },
- "bottom_right" : {
- "lat" : 40.01,
- "lon" : -71.12
- }
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ===== Lat Lon As Array
- Format in `[lon, lat]`, note, the order of lon/lat here in order to
- conform with http://geojson.org/[GeoJSON].
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top_left" : [-74.1, 40.73],
- "bottom_right" : [-71.12, 40.01]
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ===== Lat Lon As String
- Format in `lat,lon`.
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top_left" : "40.73, -74.1",
- "bottom_right" : "40.01, -71.12"
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ===== Geohash
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top_left" : "dr5r9ydj2y73",
- "bottom_right" : "drj7teegpus6"
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ==== Vertices
- 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.
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_bounding_box" : {
- "pin.location" : {
- "top" : -74.1,
- "left" : 40.73,
- "bottom" : -71.12,
- "right" : 40.01
- }
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ==== geo_point Type
- The filter *requires* the `geo_point` type to be set on the relevant
- field.
- [float]
- ==== Multi Location Per Document
- 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
- [float]
- ==== Type
- 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:
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "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"
- }
- }
- }
- }
- --------------------------------------------------
|