解决Elasticesearch中传输经纬度坐标(geo-point)无法识别的问题

应用场景:


在往Elasticesearch中传输数据的过程中,后台人员无法获取经纬度值,后来在官方文档中查到:

地理坐标点(geo-point)是指地球表面可以用经纬度描述的一个点。地理坐标点可以用来计算两个坐标位置间的距离,或者判断一个点是否在一个区域中。

地理坐标点不能被动态映射(dynamic mapping)自动检测,而是需要显式声明对应字段类型为geo_point


这也就是说,如果不对经纬度的类型手动映射,系统是无法识别的,只能以默认的string类型来识别,这样根本无法实现经纬度本来的特性。那如何对经纬度进行手动映射呢?


mapping映射:


官方文档给出的方式是:

PUT /attractions
{
  "mappings": {
    "restaurant": {
      "properties": {
        "name": {
          "type": "string"
        },
        "location": {
          "type": "geo_point"
        }
      }
    }
  }
}

我习惯在浏览器插件中直接执行这条脚本命令


这里补充一下put 后面和mapping下面的名称都代表啥意思,具体参见ES中文官方文档https://es.xiaoleilu.com/010_Intro/25_Tutorial_Indexing.html


通过数据浏览,可以确认已经mapping成功,只是现在并没有导入数据,所以列表为空



插入数据


接下来可以传入一个经纬度,看看是否已经显示为geo_point格式类型

PUT /attractions/restaurant/1
{
  "name":     "传入一个经纬度数据",
  "location": "40.715, -74.011" 
}



在Kibana中确认


先建一个同名称的索引目录


确认location字段类型是否为geo_point 类型


确认无误!至此mapping才算成功

猜你喜欢

转载自blog.csdn.net/zaishijizhidian/article/details/81015988