Elasticsearch(021):es常见的字段映射类型之地理点类型(geo-point)

概念

大家平时肯定经常美团、饿了吗类似的外卖软件。她其中最常见的功能就是附件的商家的功能。她这功能就能借助es来实现。

es中的地理位置数据类型:该类型的字段接受经纬度对,进行使用。

常见的使用场景

  • 在边界框内,中心点一定距离内或多边形内找到地理点
  • 地理位置或距中心点的距离汇总文档
  • 将距离整合到文档的相关性分数中
  • 距离对文档进行排序

示例使用

1、映射定义示例如下。

PUT example
PUT example/docs/_mapping
{
    "properties":{
        "cityId":{"type": "long"},
        "cityName":{"type": "text"},
        "location":{"type": "geo_point"},
        "remark":{"type": "text"}
    }
}

2、新增文档示例如下。

PUT example/docs/1
{
    "cityId":1,
    "cityName":"xi'an",
    "location": {
        "lat":"34.45",
        "lon":"107.40"
    },
    "remark":"中国旅游城市"

}

PUT example/docs/2
{
    "cityId":2,
    "cityName":"Singapore",
    "location": "1.05,104.60",
    "remark":"世界港口"
}

PUT example/docs/3
{
    "cityId":3,
    "cityName":"Sydney",
    "location": [151.12, -33.51],
    "remark":"澳洲大城"
}

2、搜索示例如下。

我们可以看得出来,geo_point类型的字段有至少有三种形式的添加方式。

  • latlon键表示为对象的地理位置
  • 以字符串形式表示的地理位置,格式为:"lat,lon"
  • 表示为数组的地理位置,格式为:[lon,lat]

测试数据已经添加进去,搜索时怎么使用呢。如下

我们假设这样一个需求,搜索在指定经纬度区域的城市有哪些?

GET example/docs/_search
{
    "query":{
        "geo_bounding_box": {
            "location":{
                "top_left":{
                    "lat": 50,
                    "lon": 110
                },
                "bottom_right":{
                    "lat": -40,
                    "lon": 179
                }
            }
        }
    }
}

有关geo-point的搜索后面会有专门的小节来讲解。我们在这里重点在于理解geo-point类型的定义和基础用法。

  • 2
    点赞
  • 2
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:成长之路 设计师:Amelia_0503 返回首页
评论

打赏作者

瘦子没有夏天

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值