新闻详情 Banner

搞懂_geo_distance函数,别再让地图距离计算坑了你的项目

2026/6/11 21:28:54

搞懂_geo_distance函数,别再让地图距离计算坑了你的项目

本文关键词:_geo_distance

做 Geo 这行十一年了,真见过太多因为一个距离计算搞崩服务器,或者算出个离谱结果被老板骂得狗血淋头的惨案。

今天不扯那些高大上的理论,就聊聊最实在的_geo_distance。

很多新手一听到“附近的人”或者“周边搜索”,第一反应就是拉表、用公式算。

我告诉你,千万别这么干。

你想想,如果用户量上来,每秒几千个请求,你那 CPU 还能转得动吗?

我前年接手的一个项目,就是典型的反面教材。

当时为了赶工期,直接用 SQL 的 Haversine 公式硬算。

结果上线第三天,数据库直接拖死,线上事故。

老板脸都绿了,问我怎么解决。

这时候就得祭出 Elasticsearch 里的_geo_distance 这个神器了。

它底层用的是 Geohash 或者 QuadTree 技术,能把地球表面划分成网格。

这样查询的时候,不用全表扫描,直接定位到附近的网格,速度提升不止一个量级。

但是,这里有个大坑,很多人都不知道。

就是单位的问题。

在 ES 里,_geo_distance 默认的单位是米。

但你有时候需要公里,或者英里,这时候如果不注意转换,算出来的距离能差出一万倍。

我有一次帮客户排查问题,发现他查出来的“附近 500 米”的店,实际距离有 5 公里。

查了半天日志,才发现他在 DSL 里忘了写 unit,或者写错了缩写。

这种低级错误,真的让人想砸键盘。

还有啊,很多人喜欢用 geo_point 存经纬度,这没错。

但如果你存的是 geo_shape,比如一个多边形的商圈范围,那玩法又不一样了。

这时候_geo_distance 可能就不太好使了,得配合 geo_bounding_box 或者 geo_polygon 用。

我见过一个做外卖平台的哥们,因为没搞懂这个,导致骑手接单范围经常错乱。

有的骑手明明在城东,却接到了城西的订单,因为距离计算偏差太大。

后来我们重新梳理了数据结构,把核心商圈用 geo_shape 存起来,外围用 geo_point。

这样既保证了精度,又兼顾了性能。

再说说性能优化。

如果你要查“1 公里内”的所有商家,建议加上 filter 上下文。

别把它放在 query 上下文里,那样会算相关性得分,浪费资源。

直接用 filter,只判断是否在范围内,不计算分数,速度飞快。

这点细节,很多教程里都不提,都是靠踩坑踩出来的。

另外,数据精度也是个问题。

经纬度保留几位小数?

一般来说,保留 6 位小数,精度大概在 1 米左右。

再多了,存储压力大,意义也不大。

除非你是做高精度导航,否则没必要追求极致精度。

我有个朋友,非要保留 8 位小数,结果索引文件大得吓人,查询慢得像蜗牛。

真是得不偿失。

最后,提醒一下大家,测试的时候,一定要用真实数据。

别拿几条假数据测测就上线,真到了高并发场景,各种边界情况才会暴露出来。

比如极点附近的计算,或者跨越国际日期变更线的情况,都得考虑到。

虽然_geo_distance 很强大,但它也不是万能的。

对于超大规模的数据,还是得结合分片策略,合理设计索引。

总之,做 Geo 开发,细节决定成败。

希望这篇帖子能帮你们避避坑,少加点班。

毕竟,头发掉得越少,代码写得越好,对吧?

哈哈,开个玩笑。

希望能帮到正在头疼距离计算的你。

相关新闻

_f3大考geo会出什么,老鸟熬夜复盘,这几点别踩坑

_f3大考geo会出什么,老鸟熬夜复盘,这几点别踩坑

凌晨三点,我盯着屏幕上的代码,眼睛干涩得像撒了沙子。又是这样,距离_f3大考geo会出什么的答案越来越近,焦虑感像潮水一样往头上拍。做Geo这行六年了,我见过太多人抱着侥幸心理去赌题。结果呢?考场上抓耳挠腮,下来骂娘。今天我不讲大道理,就聊聊最近几个学员跟我吐槽的真…

2026/6/11 23:14:39
_geo板面 怎么排?老鸟掏心窝子,教你避开那些坑

_geo板面 怎么排?老鸟掏心窝子,教你避开那些坑

做 geo 板面 优化,最让人头疼的不是技术有多难,而是明明照着教程做了,排名就是不动,甚至直接掉到底部。我入行八年,见过太多老板花大价钱买排名,结果钱花了,网站还在角落里吃灰。今天不整那些虚头巴脑的理论,就聊聊我踩过的坑和总结出来的土办法。很多新手一上来就盯着…

2026/6/11 22:48:45
戴了三年隐形才敢说:geo隐形眼镜蜜糖系列到底值不值得入?

戴了三年隐形才敢说:geo隐形眼镜蜜糖系列到底值不值得入?

说实话,刚入行那会儿我也觉得隐形眼镜就是个消耗品,能看清就行。直到这几年,眼干、红血丝成了家常便饭,我才明白选对镜片有多重要。今天不整那些虚头巴脑的参数,就聊聊我私藏很久的一款——geo隐形眼镜蜜糖系列。很多姐妹私信问我,这玩意儿是不是智商税?我戴了快两年,今…

2026/6/9 8:42:29
做了15年视光老鸟掏心窝子:geo隐形眼镜测评到底值不值?别被忽悠了

做了15年视光老鸟掏心窝子:geo隐形眼镜测评到底值不值?别被忽悠了

标题下边写入一行记录本文主题关键词写成本文关键词:geo隐形眼镜测评说实话,干这行十五年,我见过太多人把眼睛当试验田。每次看到年轻人戴着劣质镜片在那儿揉眼睛,我都想冲上去给两巴掌。今天不整那些虚头巴脑的参数,就聊聊大家最关心的geo隐形眼镜测评。这牌子在圈子里争…

2026/6/9 8:42:26
GEO隐形眼镜怎么选才不踩坑?老玩家掏心窝子分享避坑指南

GEO隐形眼镜怎么选才不踩坑?老玩家掏心窝子分享避坑指南

本文关键词:GEO隐形眼镜做这行十五年了,见惯了太多人因为乱买隐形眼镜把眼睛搞坏。很多人一上来就问:GEO隐形眼镜到底值不值得买?是不是智商税?今天我不讲那些晦涩的参数,只说大实话。这篇文章就是为了解决你选镜时的纠结,告诉你怎么挑才不伤眼,怎么戴才舒服。先说结论…

2026/6/9 8:22:25
GEO引用文献怎么找?老数据员掏心窝子避坑指南

GEO引用文献怎么找?老数据员掏心窝子避坑指南

做生信分析的,谁没被GEO数据坑过?那天凌晨三点,我盯着屏幕上的报错代码,头发都要薅秃了。为了复现一篇高分论文,我死磕一个GEO数据集整整一周。结果发现,所谓的“原始数据”根本下不下来。这就是GEO引用文献最残酷的现实:你以为你在捡漏,其实你在踩雷。很多新手朋友,看…

2026/6/9 10:19:06
别瞎忙了,geo引擎优化系统才是流量变现的最后一块拼图

别瞎忙了,geo引擎优化系统才是流量变现的最后一块拼图

很多老板天天盯着后台数据看,流量上去了,钱没进来,心里急得像热锅上的蚂蚁。这篇东西不跟你扯什么高大上的理论,只说怎么把那些看不见的流量变成真金白银。看完你大概就知道,为什么你的竞争对手总能精准找到客户,而你只能在门口干瞪眼。记得去年有个做本地装修的朋友找我…

2026/6/12 6:17:37
geo引擎批发怎么选才不踩坑?老鸟掏心窝子分享避坑指南

geo引擎批发怎么选才不踩坑?老鸟掏心窝子分享避坑指南

本文关键词:geo引擎批发说实话,入行做geo这块快七年了,见过太多刚入行的小白被忽悠得团团转。前两天有个做外贸的朋友找我喝酒,哭诉自己花大价钱搞了一套系统,结果流量进来全是垃圾,转化率几乎为零。他问我:“哥,这geo引擎批发是不是就是个坑?”我听完心里挺不是滋味的…

2026/6/9 9:12:26