第五阶段 50 · geo 地理查询(geo_point / geo_distance)

发布时间:2026/9/22 19:59:14

第五阶段 50 · geo 地理查询(geo_point / geo_distance) 50 · geo 地理查询geo_point / geo_distance阶段第五阶段 / 进阶可选业务涉及地理位置时ESgeo_point/geo_shapegeo_distance/geo_bounding_box| PostgreSQLPostGISgeography/ST_DWithin1. 概念存经纬度并按「距离/范围」检索就用地理类型类型用途geo_point一个点经纬度最常用geo_shape线/面/多边形等复杂形状常见查询geo_distance某点 N 公里内、geo_bounding_box矩形框内、geo_distance聚合/排序按距离排序、分环统计。2. PostgreSQL 对照-- PostGIS5km 内的门店SELECT*FROMstoresWHEREST_DWithin(geog,ST_MakePoint(:lon,:lat)::geography,5000);-- 按距离排序SELECT*,geog-ST_MakePoint(:lon,:lat)::geographyASdistFROMstoresORDERBYdistLIMIT10;ES 的geo_distance≈ST_DWithin按距离排序 ≈-排序。3. ES DSL3.1 mapping 写入PUT stores_idx { mappings: { properties: { name: { type: keyword }, location: { type: geo_point } } } } POST stores_idx/_doc { name: Store-1, location: { lat: 39.9042, lon: 116.4074 } }3.2 geo_distanceN 公里内 按距离排序GET stores_idx/_search { query: { bool: { filter: { geo_distance: { distance: 5km, location: { lat: 39.9, lon: 116.4 } } } } }, sort: [ { _geo_distance: { location: { lat: 39.9, lon: 116.4 }, order: asc, unit: km } } ] }3.3 geo_bounding_box矩形框内query: { geo_bounding_box: { location: { top_left: { lat: 40.1, lon: 116.2 }, bottom_right: { lat: 39.7, lon: 116.6 } } } }4. Spring Boot 实现ComponentpublicclassDoc50GeoQuery{AutowiredprivateElasticsearchClientelasticsearchClient;/** 某点 radiusKm 公里内的门店按距离升序 */publicListMapString,Objectnearby(StringindexName,doublelat,doublelon,doubleradiusKm)throwsIOException{SearchResponseMaprespelasticsearchClient.search(s-s.index(indexName).query(q-q.bool(b-b.filter(f-f.geoDistance(g-g.field(location).distance(radiusKmkm).location(l-l.latlon(ll-ll.lat(lat).lon(lon))))))).sort(so-so.geoDistance(gd-gd.field(location).location(l-l.latlon(ll-ll.lat(lat).lon(lon))).order(SortOrder.Asc).unit(DistanceUnit.Kilometers))),Map.class);returnresp.hits().hits().stream().map(Hit::source).filter(Objects::nonNull).collect(Collectors.toList());}}importco.elastic.clients.elasticsearch._types.SortOrder、...DistanceUnit。每个 hit 的距离在hit.sort()对应_geo_distance排序值里可取出。5. 坑与最佳实践经纬度顺序易错GeoJSON 数组是[lon, lat]对象是{lat, lon}——别写反。geo_distance放filter不需要打分放 filter 更快、可缓存。距离排序有成本每命中文档都算距离大结果集配合先用geo_distance过滤缩小范围。精度 vs 性能geo_distance有arc精确/plane快、近距离够用两种算法。复杂形状用geo_shape点用geo_point即可多边形/围栏才上geo_shape。
延伸阅读

更多相关文章

2026/9/21 10:08:07

第五阶段 49 · 安全:TLS、API Key、RBAC

49 安全:TLS、API Key、RBAC阶段:第五阶段 / 运维进阶 ES:传输加密、身份认证、最小权限授权 | PostgreSQL:SSL、用户与角色、权限控制1. 概念 Elasticsearch 生产安全通常是三层: TLS(传输加密&#xff0…

2026/9/19 23:34:47

网易云音乐NCM格式转换终极指南:3步快速解密音乐文件

网易云音乐NCM格式转换终极指南:3步快速解密音乐文件 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲无法在其他播放器播放而烦恼吗?ncmdump工具正是你需要的解决方案,…

2026/9/22 19:56:28

拒绝卡顿!2d网游帧率优化实战,从入门到精通

拒绝卡顿!2d网游帧率优化实战,从入门到精通 你是不是也遇到过这种情况:看了一堆教程,代码能跑通,Demo也做得花里胡哨,但一放到真机或者大地图场景里,帧率直接掉到20以下,玩家还没看清发生了什么就卡死了?这种“看了一堆教程还是不会写项目”…

2026/9/22 19:56:28

苹果手机长截屏图解原理

告别长截屏卡顿:保姆级教程揭秘底层渲染性能优化 是不是也被那种“报错一堆看不懂 StackTrace”的崩溃瞬间折磨过?当你试图在自动化测试或爬虫项目中处理一张超长的手机网页截图时,程序直接卡死,内存溢出警告疯狂刷屏,那种无力感真的让人想砸…

2026/9/22 19:56:28

片反过来是什么字手写实现:配置卡死救急指南

片反过来是什么字手写实现:配置卡死救急指南 配置环境就卡半天,这种痛谁懂?明明照着文档一步步来,Node版本对了,依赖装完了,结果一跑代码,浏览器转圈转到天荒地老。这时候别急着骂娘,也别盲目重装环境。很多性能瓶颈不在环境,而在你的代码逻辑里…

2026/9/22 19:56:28

25az最佳实践:搞定市政公用工程证书变更与注销全流程

25az最佳实践:搞定市政公用工程证书变更与注销全流程 复制来的代码跑不通不知道怎么调?在市政公用工程领域,很多从业者面对“25az”这类涉及证书管理、变更与注销的复杂流程时,往往陷入同样的困境:网上的信息碎片化,官方文档晦涩难懂,自己照着…

2026/9/22 19:56:28

3个文字快闪性能优化方案图解原理与实战避坑

3个文字快闪性能优化方案图解原理与实战避坑 官方文档关于文字快闪效果的实现细节散落在各个章节,翻了两小时还没找到核心渲染逻辑,这种抓不住重点的焦虑感谁懂。别去死磕那些晦涩的 API…

2026/9/22 19:51:27

智能抄表系统面试必问:3分钟吃透核心逻辑

智能抄表系统面试必问:3分钟吃透核心逻辑 面试被问原理答不上来?别慌,今天把智能抄表系统核心逻辑拆透。很多候选人背了八股文,一追问数据怎么从电表传到云端就卡壳。 这其实是 面试必问…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/22 0:04:49

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点

输电线路在线监测高频面试题拆解 3秒抓住官方文档重点 官方文档几百页翻到头还是懵?面试问到 输电线路在线监测 的数据链路时,脑子一片空白?别慌,这种 高频面试题 我整理了10年,专门治各种“文档太长抓不住重点”的毛病。…

2026/9/22 0:04:49

中介房源管理系统重构避坑:3个关键步骤搞定API变更

中介房源管理系统重构避坑:3个关键步骤搞定API变更 版本升级后 API 全变了,这种痛只有真做过的人懂。 很多团队在接手老旧房产项目时,最崩溃的不是代码烂,而是底层框架升级后,原本熟悉的接口调用方式彻底失效。 这份 保姆级教程…

2026/9/22 0:04:49

3个坑点带你一文搞懂55gg小游戏源码

3个坑点带你一文搞懂55gg小游戏源码 盯着控制台满屏的红色报错,看着那一长串 StackTrace ,是不是脑子瞬间宕机?别急,这种时候最忌讳的就是盲目改代码。很多刚入行的前端同学,面对 55gg 小游戏这类轻量级 H5…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/21 18:32:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码