这段时间处理一部分数据,是我之前把地址转换为经纬度的数据,之前是想着把经纬度直接用sql计算出距离,但是发现hive比较慢。最后调研发现es 直接有这个根据经纬度计算距离的功能,并且还能排序出来,最重要的是快很多。
GET /liando/_search
{
"query": {
"bool":{
"filter":{
"geo_distance" : {
"distance" : "100km",
"lat_lon" : {
"lat" : 24.46667,
"lon" : 118.10000
}
}
}
}
}
}
这是你指定一个经纬度,然后es根据你给出的范围去找距离你给的经纬度(lat_lon)你给的参数(distance:100km)的数据有多少。
但是我的原始数据表里也需要这些数据,所以找了esclient的客户端,遇见了一个麻烦事,我hive里的数据是存成string的,在导入es的时候不能映射成“geopoint”类型,所以还需要新建表来转换一下,导一波数据,目前没找到别的好方法,大佬们有更好的方法欢迎来评论。方法如下:
kibana举个例子;
PUTtest2 -----------------原表
{
"mappings": {
"test1": {
"properties": {
"sort": {
"type": "float"
}
}
}
}
}
PUT test1 ------------------------------新表
{
"mappings": {
"test1": {
"properties": {
"sort": {
"type": "number"
}
}
}
}
}
POST _reindex -----------传输数据
{
"source": {
"index": "test2"
},
"dest": {
"index": "test1"
}
}
DELETE test2 ---------删除表