Geo-point datatype
editGeo-point datatype
editFields of type geo_point
accept latitude-longitude pairs, which can be used:
- to find geo-points within a bounding box, within a certain distance of a central point, or within a polygon.
- to aggregate documents by geographically or by distance from a central point.
- to integrate distance into a document’s relevance score.
- to sort documents by distance.
There are four ways that a geo-point may be specified, as demonstrated below:
PUT my_index { "mappings": { "my_type": { "properties": { "location": { "type": "geo_point" } } } } } PUT my_index/my_type/1 { "text": "Geo-point as an object", "location": { "lat": 41.12, "lon": -71.34 } } PUT my_index/my_type/2 { "text": "Geo-point as a string", "location": "41.12,-71.34" } PUT my_index/my_type/3 { "text": "Geo-point as a geohash", "location": "drm3btev3e86" } PUT my_index/my_type/4 { "text": "Geo-point as an array", "location": [ -71.34, 41.12 ] } GET my_index/_search { "query": { "geo_bounding_box": { "location": { "top_left": { "lat": 42, "lon": -72 }, "bottom_right": { "lat": 40, "lon": -74 } } } } }
Geo-point expressed as an object, with |
|
Geo-point expressed as a string with the format: |
|
Geo-point expressed as a geohash. |
|
Geo-point expressed as an array with the format: [ |
|
A geo-bounding box query which finds all geo-points that fall inside the box. |
Geo-points expressed as an array or string
Please note that string geo-points are ordered as lat,lon
, while array
geo-points are ordered as the reverse: lon,lat
.
Originally, lat,lon
was used for both array and string, but the array
format was changed early on to conform to the format used by GeoJSON.
Parameters for geo_point
fields
editThe following parameters are accepted by geo_point
fields:
If |
Using geo-points in scripts
editWhen accessing the value of a geo-point in a script, the value is returned as
a GeoPoint
object, which allows access to the .lat
and .lon
values
respectively:
geopoint = doc['location'].value; lat = geopoint.lat; lon = geopoint.lon;
For performance reasons, it is better to access the lat/lon values directly:
lat = doc['location'].lat; lon = doc['location'].lon;