弹性搜索地理位置查询
es中有两种类型的地理位置数据,geo_point和geo_shape。Es不能自动识别这种数据类型,需要在创建映射时手动指定。
Geo_point使用经纬度坐标,可以计算落在矩形内的点、以某点为半径的点(圆)、多边形内的点(已弃用)、排序、聚合等操作。
Geo_shape表示一个复杂的图形,用GeoJSON的格式表示。比如我们要表达一个库的坐标位置,如果这个库占的位置比较大,用一个点来表达可能不太准确,然后我们可以用geo_shape来表达。
但是这种数据类型也有缺点:比如不能排序(因为是多边形点)。
图中1,① ② ③ ④表示需要加入es的建筑物。
2.图中的圆圈、正方形、多边形表示你需要用es在后面找出里面的位置。
3.图中的短箭头?代表一个边界。
注意?:
1.在索引中,我们自己指定的位置字段的类型是geo_point。
2.building_name的字段类型为关键字,表示不分词。该字段仅用于测试,没有任何用处。
3.es7中只有一种类型,没有指定索引的类型。
注意?:
1.从上面可以看出,插入地理位置有四种方式。
从上图可以看出,左上角和右下角的坐标分别是(121.444075,31.265395)和(1217,31.535)。
通过执行查询,您应该能够找到上海火车站和叶晚袁晶大厦。
如图所示,已经查询了上海火车站和叶晚袁晶大厦,结果是正确的。
这是一个距离查询,是从某一点扩展到周围的距离范围。
在上一步的背景中,我们知道了上海站的坐标(121.462311.31.256224),也知道了它离周边有多远。在这里,我们以上海站为中心,询问方圆的600米建筑。
注意?:
1和distance_type的值中有两个弧和平面。
2.距离后可用的单位有千米、米、厘米、毫米、海里、米、码、英尺和英寸。
注意?:
1,sort执行排序。
需求:
1,es查询语句
从上图可以看出:
1.上海站0-500m范围内只有1栋。
2.距离上海站500-1000之间有1栋。
3.距离上海站1000以上有两站。
1,查询语句,查询出所有数据,过滤出上海站3公里范围内的所有建筑。
2.aggs用于统计上海500m以内、500-1000m和1000m以外的建筑物数量。
3.sort用于排序。
4.使用post_filter将结果缩小到上海火车站1000米以内。
1,地理点数据类型
2.距离单位
3.整理
4.矩形查询
5、循环查询、距离查询
6.坐标拾取系统