123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- [[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 mapping and indexed
- document:
- [source,js]
- --------------------------------------------------
- PUT /my_locations
- {
- "mappings": {
- "_doc": {
- "properties": {
- "pin": {
- "properties": {
- "location": {
- "type": "geo_point"
- }
- }
- }
- }
- }
- }
- }
- PUT /my_locations/_doc/1
- {
- "pin" : {
- "location" : {
- "lat" : 40.12,
- "lon" : -71.34
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- // TESTSETUP
- Then the following simple query can be executed with a `geo_distance`
- filter:
- [source,js]
- --------------------------------------------------
- GET /my_locations/_search
- {
- "query": {
- "bool" : {
- "must" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "200km",
- "pin.location" : {
- "lat" : 40,
- "lon" : -70
- }
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- [float]
- ==== Accepted Formats
- In much the same way the `geo_point` type can accept different
- representations of the geo point, the filter can accept it as well:
- [float]
- ===== Lat Lon As Properties
- [source,js]
- --------------------------------------------------
- GET /my_locations/_search
- {
- "query": {
- "bool" : {
- "must" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : {
- "lat" : 40,
- "lon" : -70
- }
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- [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]
- --------------------------------------------------
- GET /my_locations/_search
- {
- "query": {
- "bool" : {
- "must" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : [-70, 40]
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- [float]
- ===== Lat Lon As String
- Format in `lat,lon`.
- [source,js]
- --------------------------------------------------
- GET /my_locations/_search
- {
- "query": {
- "bool" : {
- "must" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : "40,-70"
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- [float]
- ===== Geohash
- [source,js]
- --------------------------------------------------
- GET /my_locations/_search
- {
- "query": {
- "bool" : {
- "must" : {
- "match_all" : {}
- },
- "filter" : {
- "geo_distance" : {
- "distance" : "12km",
- "pin.location" : "drm3btev3e86"
- }
- }
- }
- }
- }
- --------------------------------------------------
- // CONSOLE
- [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 `arc` (default), or `plane` (faster, but inaccurate on long distances and close to the poles).
- `_name`::
- Optional name field to identify the query
- `validation_method`::
- Set to `IGNORE_MALFORMED` to accept geo points with invalid latitude or
- longitude, set to `COERCE` to additionally try and infer correct
- coordinates (default is `STRICT`).
- [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.
- [float]
- ==== Ignore Unmapped
- When set to `true` the `ignore_unmapped` option will ignore an unmapped field
- and will not match any documents for this query. This can be useful when
- querying multiple indexes which might have different mappings. When set to
- `false` (the default value) the query will throw an exception if the field
- is not mapped.
|