Elasticsearch核心技术与实战-地理位置获取查询

 

一、存储创建

存储格式有三种

  • 字符串形式以半角逗号分割,如 "lat,lon" 。
  • ​ 对象形式显式命名为 lat 和 lon 。
  • ​ 数组形式表示为 [lon,lat] 。
  1. 由于我采用canal 同步mysql数据到 Elasticsearch的,所以需要转换拼接经纬度字段,然后导入,所以我采用的是第一种形式,而且sql也比较好拼接;第三种数组形式,同步数据会报数据类型错误问题。如果mysql存储就是以上类型,那就更好,不用转换。
  2. 并且Elasticsearch 新建geo_point 数据类型字段接收数据

类型对应接受经纬度信息。

PUT /my_locations
{
    "mappings": {
        "_doc": {
            "properties": {
                "pin": {
                    "properties": {
                        "location": {
                            "type": "geo_point"
                        }
                    }
                }
            }
        }
    }
}
 
PUT /my_locations/_doc/1
{
    "pin" : {
        "location" : {
            "lat" : 40.12,
            "lon" : -71.34
        }
    }
}

注:经验证 put 数据时候,可以是 "location":"40,70"格式,也可以是如上格式, 混合插入都可以查询,pin 可以不要,只新增 location 字段属性;

二、查询

Geo Distance 查询

GET /my_locations/_search
{
    "query": {
        "bool" : {
            "must" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "200km",
                    "pin.location" : {
                        "lat" : 40,
                        "lon" : -70
                    }
                }
            }
        }
    }
}

同样:pin.location ---> locationg:"lat,lon" 格式,经验证都是可以的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值