123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- [[query-dsl-geo-distance-query]]
- === Geo Distance Query
- Filters documents that include only hits that exists within a specific
- distance from a geo point. Assuming the following indexed json:
- [source,js]
- --------------------------------------------------
- {
- "pin" : {
- "location" : {
- "lat" : 40.12,
- "lon" : -71.34
- }
- }
- }
- --------------------------------------------------
- Then the following simple query can be executed with a `geo_distance`
- filter:
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "200km",
- "pin.location" : {
- "lat" : 40,
- "lon" : -70
- }
- }
- }
- }
- }
- --------------------------------------------------
- [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_distance" : {
- "distance" : "12km",
- "pin.location" : {
- "lat" : 40,
- "lon" : -70
- }
- }
- }
- }
- }
- --------------------------------------------------
- [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_distance" : {
- "distance" : "12km",
- "pin.location" : [-70, 40]
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ===== Lat Lon As String
- Format in `lat,lon`.
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : "40,-70"
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ===== Geohash
- [source,js]
- --------------------------------------------------
- {
- "filtered" : {
- "query" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : "drm3btev3e86"
- }
- }
- }
- }
- --------------------------------------------------
- [float]
- ==== Options
- The following are options allowed on the filter:
- [horizontal]
- `distance`::
- The radius of the circle centred on the specified location. Points which
- fall into this circle are considered to be matches. The `distance` can be
- specified in various units. See <<distance-units>>.
- `distance_type`::
- How to compute the distance. Can either be `sloppy_arc` (default), `arc` (slightly more precise but significantly slower) or `plane` (faster, but inaccurate on long distances and close to the poles).
- `optimize_bbox`::
- Whether to use the optimization of first running a bounding box check
- before the distance check. Defaults to `memory` which will do in memory
- checks. Can also have values of `indexed` to use indexed value check (make
- sure the `geo_point` type index lat lon in this case), or `none` which
- disables bounding box optimization.
- [float]
- ==== geo_point Type
- The filter *requires* the `geo_point` type to be set on the relevant
- field.
- [float]
- ==== Multi Location Per Document
- The `geo_distance` 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.
|