ElasticSearch Cookbook(Second Edition)
上QQ阅读APP看书,第一时间看更新

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 of tree_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 is 0,025% and the maximum value is 0,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