ElasticSearch 可以对地理位置点 geo_point 类型和地理位置形状 geo_shape 类型的数据进行搜索。
地址位置数据:
1 | {"index" : {"_index" : "geo", "_type" : "city", "_id" : "1"}} |
创建一个索引并设置映射:
1 | PUT geo |
geo_distance query
geo_distance query 可以查找在一个中心点指定范围内的地理点文档,例如查找距离北京200KM以内的城市
1 | GET geo/_search |
按各城市离北京的距离排序:
1 | GET geo/_search |
geo_bounding_box query
geo_bounding_box query 用于查找落入指定的矩形内的地址坐标。查询中由两个点确定一个矩形
1 | GET geo/_search |
geo_polygon query
geo_polygon query 用于查找在指定多边形内的地理点
1 | GET geo/_search |
geo_shape query
geo_shape query 用于查询 get_shape 类型的地理数据,地理形状之间的关系有相交、包含、不相交三种。
创建一个新的索引用于测试,其中 location 字段的类型设为 get_shape 类型:
1 | PUT geoshape |
关于经纬度的顺序,geo_point 类型的字段纬度在前经度在后,对于 geo_shape 类型则相反
把西安和郑州连成的线写入索引:
1 | POST geoshape/city/1 |
查询包含在由银川和南昌作为对角线上的点组成的矩形的地理形状,由于西安和郑州组成的直线在该矩形区域内,因此可以被查到
1 | GET geoshape/_search |