Mapping a geo shape field
An extension to the concept of point is shape. ElasticSearch provides a type that facilitates the management of arbitrary polygons: the geo shape.
Getting ready
You need a working ElasticSearch cluster with Spatial4J (v0.3) and JTS (v1.12) in the classpath to use this type.
How to do it...
In order to map a geo_shape
type, a user must explicitly provide some parameters:
tree
(by default,geohash
): This is the name of the prefix tree implementation called geohash for GeohashPrefixTree and quadtree for QuadPrefixTree.precision
: This is used instead oftree_levels
to provide a more human value to be used in the tree level. The precision number can be followed by the unit, such as 10 m, 10 km, 10 miles, and so on.tree_levels
: This is the maximum number of layers to be used in the prefix tree.distance_error_pct
(the default is0,025%
and the maximum value is0,5%)
: This sets the maximum number of errors allowed in PrefixTree.
The customer_location
mapping, which we have seen in the previous recipe using geo_shape
, will be:
"customer_location": { "type": "geo_shape", "tree": "quadtree", "precision": "1m" },
How it works...
When a shape is indexed or searched internally, a path tree is created and used.
A path tree is a list of terms that contain geographic information, computed to improve performance in evaluating geometric calculus.
The path tree also depends on the shape type, such as point, linestring, polygon, multipoint, and multipolygon.
See also
- To fully understand the logic behind geo shape, some good resources are the ElasticSearch page about geo shape and the sites of the libraries used for geographic calculus (https://github.com/spatial4j/spatial4j and http://www.vividsolutions.com/jts/jtshome.htm).