应用场景:
在往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才算成功