Mapper type called geo_point
to support geo based points. The declaration looks as follows:
{ "pin" : { "properties" : { "location" : { "type" : "geo_point" } } } }
Indexed Fields
The geo_point
mapping will index a single field with the format of lat,lon
. The lat_lon
option can be set to also index the .lat
and .lon
as numeric fields, and geohash
can be set to true
to also index .geohash
value.
A good practice is to enable indexing lat_lon
as well, since both the geo distance and bounding box filters can either be executed using in memory checks, or using the indexed lat lon values, and it really depends on the data set which one performs better. Note though, that indexed lat lon only make sense when there is a single geo point value for the field, and not multi values.
Input Structure
The above mapping defines a geo_point
, which accepts different formats. The following formats are supported:
Lat Lon as Properties
{ "pin" : { "location" : { "lat" : 41.12, "lon" : -71.34 } } }
Lat Lon as String
Format in lat,lon
.
{ "pin" : { "location" : "41.12,-71.34" } }
Geohash
{ "pin" : { "location" : "drm3btev3e86" } }
Lat Lon as Array
Format in [lon, lat]
, note, the order of lon/lat here in order to conform with GeoJSON.
{ "pin" : { "location" : [-71.34, 41.12] } }
Mapping Options
Option | Description |
---|---|
lat_lon |
Set to true to also index the .lat and .lon as fields. Defaults to false . |
geohash |
Set to true to also index the .geohash as a field. Defaults to false . |
geohash_precision |
Sets the geohash precision, defaults to 12. |
Usage in Scripts
When using doc[geo_field_name]
(in the above mapping, doc['location']
), the doc[...].value
returns a GeoPoint
, which then allows access to lat
and lon
(for example, doc[...].value.lat
). For performance, it is better to access the lat
and lon
directly using doc[...].lat
and doc[...].lon
.