Geopoints

地理坐标点

可以用来计算两个坐标间的距离,还可以判断一个坐标是否在另一个区域中,或在聚合中。
地理坐标点不能被动态映射(dynamic mapping)自动检测,需要显示声明geo-point
经纬度信息可以是字符串、数组或者对象
注意经纬度的顺序问题

通过地理坐标点过滤

找出落在指定矩形框中的点:geo_bounding_box
找到与指定位置在给定距离内的点:geo_distance
找出与指定点距离在给定最小距离和最大距离之间的点:geo_distance_range
找出落在多边形中的点(代价很大):geo_polygon
地理坐标过滤器使用代价昂贵。尽可能先使用其他过滤器过滤

地理坐标盒模型过滤器

geo_bounding_box不需要把所有坐标点都加载到内存里,只需要简单判断lat和lon坐标数据是否在给定范围内。可以用倒排索引做一个range过滤来实现目标。
使用这种优化方式,需要把geo_point字段用lat和lon的方式分别映射到索引中。
过滤时设置type为indexed明确告诉ES这个过滤器使用倒排索引

地理距离过滤器

代价昂贵,为了优化性能,ES先使用一个盒模型来排除掉尽可能多的文档
通常使用矩形模型也能满足应用需求
地理距离计算
arc:最慢最精确,将地球当成球体来处理。精度受限于地体并不是完全的球体
plane:将地球当成是平坦的来处理。在赤道附近精度最好
sloppy_arc:精度换速度,比arc块4到5倍,精度达99.9%。默认的计算方式

按距离排序

当你可以按距离排序时,按距离打分通常是一个更好的解决方案。

Geohashes

是一种将经纬度坐标编码成字符串的方式。
Geohashes把整个世界分为32个单元的格子,4行8列
可以控制精度

Geohash单元查询

geohash_cell,将经纬度坐标根据指定精度转换成一个geohash,然后查找所有包含这个geohash的位置。

Geo aggs

geo_distance,地理位置距离,将文档按照距离围绕一个中心点来分组。
geo_bounding_box,geohash网格,将文档按照geohash范围来分组,用来显示在地图上。
地理位置边界,返回一个包含所有地理位置坐标点的边界的经纬度坐标。

Geoshapes

地理形状
geo-shapes:判断查询的形状与索引的形状的关系。不能用于计算距离、排序、打分以及聚合。
关系可以是,intersects有重叠,disjoint完全不重叠,within被包含。
映射地理形状:需要考虑精度、距离误差
索引地理形状
查询地理形状,允许使用形状来做查询;在查询中使用已索引的形状

你可能感兴趣的:(Geopoints)