原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/mapping-geo-shapes.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-geo-shapes.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-geo-shapes.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
映射地理形状 (Mapping Geo Shapes)edit
与 geo_point
类型的字段相似, 地理形状(geo-shapes)也必须在使用前显式定义映射:
PUT /attractions { "mappings": { "landmark": { "properties": { "name": { "type": "string" }, "location": { "type": "geo_shape" } } } } }
你需要考虑修改两个非常重要的设置: 精度(precision)
和 距离误差(distance_error_pct)
。
精度 (precision)edit
精度(precision)
参数用来控制生成的 geohash 的最大长度。默认精度为 9
,等同于尺寸在 5m x 5m 的geohash 。这个精度可能比你需要的精确得多。
精度越低,需要索引的词项(term)就越少,检索时也会更快。当然,精度越低,地理形状的准确性就越差。你需要考虑自己的地理形状所需要的精度 —— 即使减少1-2个等级都可以大大的节省成本。
你可以使用距离来指定精度,比如 50m
或 2km
,不过这些距离最终也会转换成Geohashes中描述的等级。
距离误差 (distance_error_pct)edit
当索引一个多边形时,中间连续区域很简单的用一个短 geohash 字符串 来表示。麻烦的是边缘部分,这些地方需要使用更精细的 geohash 才能表示。
当你在索引一个小地标时,你会希望它的边界比较精确。让这些纪念碑一个叠着一个可不好。当索引整个国家时,你就不需要这么高的精度了。误差个50米左右也不可能引发战争。
distance_error_pct
指定地理形状可以接受的最大错误率。默认值是 0.025
, 即 2.5% 。也就是说,大的地理形状(比如国家)相比小的地理形状(比如纪念碑)来说,容许更加模糊的边界。
默认值0.025
是一个不错的起点。不过,如果我们容许更大的错误率,对应地理形状需要索引的term就越少。