- ElasticSearch Cookbook
- Alberto Paro
- 406字
- 2021-04-02 10:10:02
Mapping a GeoPoint field
ElasticSearch natively supports the use of geolocation types—special types that allow localization of your document in geographic coordinate (latitude and longitude) around the world.
There are two main types used in the geographic world: the point and the shape. In this recipe we'll see the GeoPoint—the base element of a geolocation.
Getting ready
You need a working ElasticSearch cluster.
How to do it...
The type of the field must be set to geo_point
to define a GeoPoint.
We can extend the order example adding a new field that stores the location of a customer. The following code will be the result:
{ "order": { "properties": { "id": { "type": "string", "store": "yes", "index": "not_analyzed" }, "date": { "type": "date", "store": "no", "index": "not_analyzed" }, "customer_id": { "type": "string", "store": "yes", "index": "not_analyzed" }, "customer_ip": { "type": "ip", "store": "yes", "index": "yes" }, "customer_location": { "type": "geo_point", "store": "yes" }, "sent": { "type": "boolean", "store": "no", "index": "not_analyzed" } } } }
How it works...
When ElasticSearch indexes a document with a GeoPoint field (such as lat, lon), it processes the latitude and longitude coordinates and creates a special accessory field data to fast query on these coordinates.
It depends on properties, given latitude and a longitude, it's possible to compute a geohash value (http://en.wikipedia.org/wiki/Geohash) and the index process also optimizes these values for special computation such as distance, ranges, and in-shape match.
GeoPoint has special parameters that allow storage of additional geographic data:
lat_lon
(defaults tofalse
): This allows storing the latitude and longitude as a.lat
and.lon
field. Storing these values improves the performance in many memory algorithms used in distance and in-shape calculus.geohash
(defaults tofalse
): This allows storing the computed geohash value.geohash_precision
(defaults to12
): This defines the precision to be used in geohash calculus.
For example, given a GeoPoint value [45.61752, 9.08363], it will store:
customer_location
= "45.61752, 9.08363"customer_location.lat
= 45.61752customer_location.lon
= 9.08363customer_location.geohash
= "u0n7w8qmrfj"
There's more...
GeoPoint is a special type and can accept several formats as input:
lat
andlon
as properties:"customer_location": { "lat": 45.61752, "lon": 9.08363 },
lat
andlon
as strings:"customer_location": "45.61752,9.08363",
- Geohash string
"customer_location": "u0n7w8qmrfj",
- As a GeoJSON array (note in it that
lat
andlon
are reversed)"customer_location": [9.08363, 45.61752]
- Linux從零開始學(視頻教學版)
- 操作系統基礎與實踐:基于openEuler平臺
- Windows Vista融會貫通
- Python基礎教程(第3版)
- Social Data Visualization with HTML5 and JavaScript
- HTML5 Enterprise Application Development
- OpenHarmony開發與實踐:基于紅莓RK2206開發板
- Linux內核修煉之道
- Implementing Domain-Specific Languages with Xtext and Xtend(Second Edition)
- Angular權威教程
- 完美應用Ubuntu(第4版)
- Linux從入門到精通
- HarmonyOS應用開發:快速入門與項目實戰
- 龍芯電腦使用解析(統信 UOS版)
- 你必須掌握的Windows 8技巧