当前位置: 首页 > article >正文

Elasticsearch实战:地理位置精准加权,实现基于距离的智能评分排序

Elasticsearch实战地理位置精准加权实现基于距离的智能评分排序前言一、核心场景与问题1.1 典型业务场景1.2 核心问题1.3 距离评分实现流程图二、基础准备地理位置字段定义2.1 核心数据类型2.2 创建索引含地理位置字段2.3 插入测试数据三、两种实现方案按推荐度排序方案1function_score 距离加权评分企业级首选1. 核心原理2. 完整DSL实现3. 关键参数解释4. 优势方案2geo_distance 直接按距离排序简单场景1. 核心原理2. DSL实现3. 适用场景四、进阶实战多维度加权评分文本距离门店评分4.1 业务需求4.2 终极加权评分DSL4.3 多维度评分流程图五、距离评分最佳实践与注意事项5.1 最佳实践5.2 常见坑点六、总结The Begin点点关注收藏不迷路前言在本地生活、外卖配送、出行打车、门店检索等业务场景中「距离」是比关键词匹配更重要的排序因素。Elasticsearch 默认仅通过文本相关性BM25评分排序无法直接将地理位置距离纳入评分体系。本文将从原理 → 实战 → 优化 → 组合评分全流程手把手教你实现**「文本相关性 地理位置距离」双维度加权评分**让检索结果既精准又贴合距离需求。一、核心场景与问题1.1 典型业务场景外卖APP检索「奶茶店」距离近 评分高的店铺优先展示招聘平台检索「Java工程师」离我近 职位匹配的岗位优先推荐门店检索检索「加油站」距离最近 服务匹配的站点优先召回。1.2 核心问题ES 默认评分只看文本匹配度不包含距离权重导致文本匹配但距离很远的文档排在前面距离近但文本一般的文档排在后面完全不符合业务逻辑。1.3 距离评分实现流程图业务需求文本匹配距离就近定义geo_point地理位置字段构建检索请求方式1geo_distance排序纯距离方式2function score 距离加权评分推荐结果仅按距离由近到远排序结果文本得分距离得分 综合排序满足简单就近需求满足复杂加权智能排序二、基础准备地理位置字段定义2.1 核心数据类型ES 提供专门的**geo_point** 类型存储经纬度坐标支持距离计算、范围检索、距离评分。2.2 创建索引含地理位置字段PUT/store_index{settings:{number_of_shards:1},mappings:{properties:{store_name:{type:text},// 门店名称business:{type:text},// 主营业务location:{type:geo_point},// 核心地理位置字段经纬度score:{type:float}// 门店评分}}}2.3 插入测试数据POST/store_index/_doc/1{store_name:肯德基(朝阳店),business:炸鸡 汉堡 快餐,location:{lat:39.915,lon:116.404},// 纬度经度score:4.8}POST/store_index/_doc/2{store_name:麦当劳(王府井店),business:汉堡 炸鸡 薯条,location:{lat:39.910,lon:116.410},score:4.7}三、两种实现方案按推荐度排序方案1function_score 距离加权评分企业级首选1. 核心原理使用function_score查询将文本相关性得分BM25与距离衰减得分进行加权计算生成最终综合得分。距离衰减函数gauss高斯衰减—— 距离越近得分越高距离越远得分指数下降。2. 完整DSL实现需求检索「炸鸡汉堡」距离越近权重越高综合文本距离排序。GET/store_index/_search{query:{function_score:{query:{match:{business:炸鸡 汉堡// 1. 文本匹配查询}},functions:[{gauss:{// 2. 高斯距离衰减函数核心location:{origin:{lat:39.912,lon:116.406},// 用户当前位置scale:1000m,// 1000米内得分几乎不衰减offset:500m,// 500米内得分无衰减decay:0.5// 超过scale距离得分衰减一半}}}],boost_mode:multiply,// 文本得分 × 距离得分 最终得分score_mode:multiply}}}3. 关键参数解释参数含义origin用户当前经纬度坐标scale最佳距离范围此范围内距离得分最高offset偏移量该范围内不做衰减decay衰减系数0~1值越小衰减越快4. 优势支持文本相关性 距离双维度加权得分平滑过渡无断崖式排序企业级标准方案适配90%业务场景。方案2geo_distance 直接按距离排序简单场景1. 核心原理不修改评分直接通过_geo_distance排序规则按距离由近到远强制排序。2. DSL实现GET/store_index/_search{sort:[{_geo_distance:{location:{lat:39.912,lon:116.406},// 用户位置order:asc,// 升序近 → 远unit:m,// 距离单位米(m) / 千米(km)distance_type:plane}}]}3. 适用场景只需要就近排序不关心文本匹配度简单地图检索、附近的人/门店功能。四、进阶实战多维度加权评分文本距离门店评分4.1 业务需求检索门店时同时满足3个条件文本匹配度高距离近门店评分高。4.2 终极加权评分DSLGET/store_index/_search{query:{function_score:{query:{match:{business:炸鸡}},functions:[// 权重1距离衰减权重40%{gauss:{location:{origin:{lat:39.912,lon:116.406},scale:1000m,decay:0.5}},weight:0.4},// 权重2门店评分权重30%{field_value_factor:{field:score,factor:0.3}},// 权重3文本匹配度权重30%默认{weight:0.3}],boost_mode:sum// 加权求和总得分 距离40% 评分30% 文本30%}}}4.3 多维度评分流程图用户检索文本匹配得分30%距离高斯衰减得分40%门店评分加权得分30%function_score加权求和最终综合得分排序返回最符合业务的结果五、距离评分最佳实践与注意事项5.1 最佳实践首选function_score gauss实现平滑、合理的距离加权评分合理设置权重比例距离权重一般设为30%~50%经纬度顺序不能错geo_point格式 lat(纬度), lon(经度)距离单位统一优先使用米m避免单位混乱。5.2 常见坑点经纬度写反→ 距离计算完全错误字段类型不是 geo_point→ 无法执行距离计算boost_mode 设置错误→ 评分加权不生效衰减参数过大/过小→ 距离权重失衡。六、总结Elasticsearch 实现基于距离的评分排序有两种核心方案简单就近排序使用_geo_distance直接排序适合纯距离场景智能加权评分推荐使用function_score gauss高斯衰减实现文本相关性 距离 业务评分的综合排序。企业级标准公式最终得分 文本匹配30% 地理位置距离40% 业务评分30%掌握本文方案即可轻松实现外卖、出行、本地生活等LBS 智能检索业务。The End点点关注收藏不迷路

相关文章:

Elasticsearch实战:地理位置精准加权,实现基于距离的智能评分排序

Elasticsearch实战:地理位置精准加权,实现基于距离的智能评分排序前言一、核心场景与问题1.1 典型业务场景1.2 核心问题1.3 距离评分实现流程图二、基础准备:地理位置字段定义2.1 核心数据类型2.2 创建索引(含地理位置字段&#x…...

抖音无水印下载神器:3分钟掌握批量下载技巧,轻松保存你喜欢的每一个视频

抖音无水印下载神器:3分钟掌握批量下载技巧,轻松保存你喜欢的每一个视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication…...

2026届毕业生推荐的六大AI学术工具推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一款智能化写作辅助系统,是基于自然语言处理跟知识图谱技术构建的AI开题报告工具…...

MCNP实战:对比Tmesh与Fmesh卡在辐射剂量云图绘制上的差异与选择

MCNP实战:Tmesh与Fmesh卡在辐射剂量云图绘制中的深度对比与选型策略 当面对一个多层屏蔽体的辐射剂量分布计算需求时,MCNP用户往往需要在Tmesh和Fmesh两种网格卡之间做出选择。这个决定不仅影响计算效率,更直接关系到结果的可视化质量和后续…...

ComfyUI-Manager离线安装终极指南:三步实现无网络节点部署

ComfyUI-Manager离线安装终极指南:三步实现无网络节点部署 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various c…...

从视频中智能提取PPT:告别手动截图的效率革命

从视频中智能提取PPT:告别手动截图的效率革命 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经为了从会议录像或在线课程中提取PPT内容而不得不反复暂停、截图、…...

Windows Cleaner:从系统清理到性能优化的技术架构深度解析

Windows Cleaner:从系统清理到性能优化的技术架构深度解析 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 在数字化时代,Windows系统作为全…...

vue3+springboot中药材采购管理系统

目录同行可拿货,招校园代理 ,本人源头供货商功能模块分析技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块分析 用户管理模块 实现用户注册、登录、权…...

AIGC工具平台-TTS通用文本转语音

课程讲解、短视频旁白和批量内容生产都需要稳定配音,手工录制成本高,也难以保持语速和音色一致。 TTS 用于把文本生成语音,支持服务商配置、音色参数、单次生成、批量处理、播放预览和任务记录。 文章目录模块定位项目配置项目说明配置管理单…...

Janus-Pro-7B与JavaScript交互设计:构建实时AI聊天前端界面

Janus-Pro-7B与JavaScript交互设计:构建实时AI聊天前端界面 最近在折腾AI应用,发现很多朋友把后端模型部署得挺好,但一到前端交互就卡壳了。要么是聊天界面卡顿,要么是消息显示不流畅,用户体验大打折扣。特别是像Janu…...

AIGC工具平台-ASR通用音频转文本

课程录音、会议纪要和视频字幕都需要快速转文字,手工整理耗时较长,也容易漏掉时间轴和说话人信息。 ASR 语音识别用于把音频或视频转换成文本和 SRT 字幕,并支持单次识别、批量处理、任务日志和本地 FunASR 服务。 文章目录模块定位项目配置…...

如何3分钟实现GitHub界面完全汉化:面向中文开发者的终极指南

如何3分钟实现GitHub界面完全汉化:面向中文开发者的终极指南 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾经在…...

避坑指南:Unity UI Toolkit动态更新性能暴跌?实测分析与优化思路

Unity UI Toolkit动态更新性能优化实战指南 当你在策略游戏中看到数百个实时移动的单位标识,或者在MMO战斗中看到满屏跳动的伤害数字时,是否曾好奇这些动态UI元素如何保持流畅运行?许多开发者转向Unity UI Toolkit寻求解决方案,却…...

Windows系统优化终极指南:5个高效清理技巧与智能资源管理实战

Windows系统优化终极指南:5个高效清理技巧与智能资源管理实战 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设…...

如何用WorkshopDL免费下载Steam创意工坊模组:3个颠覆性技巧

如何用WorkshopDL免费下载Steam创意工坊模组:3个颠覆性技巧 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games Store或GOG平台购买了心仪的游戏&…...

如何5分钟配置E7Helper:第七史诗自动化脚本终极指南

如何5分钟配置E7Helper:第七史诗自动化脚本终极指南 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签🍃,挂讨伐、后记、祭坛✌️,挂JJC等📛,多服务器支持📺&am…...

2026年照片人像抠图用什么工具?免费手机端方案哪个更好用?

很多人做照片人像抠图默认要打开电脑端软件,但在微信里搜个小程序其实已经够用。尤其2026年手机芯片的AI算力普遍拉上来了,原本需要上传云端的神经网络模型现在能在终端完成大部分推理,抠图这件事的门槛已经从“装软件学蒙版”降到你上传一张…...

终极ThinkPad风扇控制指南:TPFanCtrl2深度解析与128级精准调速方案

终极ThinkPad风扇控制指南:TPFanCtrl2深度解析与128级精准调速方案 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 ThinkPad风扇控制工具TPFanCtrl2为Windo…...

“存储结构”特指数据在计算机内存中的组织方式,而不是持久化到外存(如文件、数据库)的方式。

你的理解非常合理!确实,“存储”这个词在日常语境中常让人联想到“存到硬盘、文件、数据库”,但在数据结构(Data Structures)这个专业领域里,“存储结构”特指数据在计算机内存中的组织方式,而不…...

Phi-3.5-mini-instruct算法解析实战:图解经典网络与PID控制原理

Phi-3.5-mini-instruct算法解析实战:图解经典网络与PID控制原理 1. 模型能力概览 Phi-3.5-mini-instruct作为一款专注于技术解析的轻量级模型,其核心优势在于将复杂的算法原理转化为工程师能快速理解的直观解释。不同于传统教材的数学推导,…...

3个终极解决方案:用FreeMove智能迁移Windows目录,彻底告别C盘空间焦虑

3个终极解决方案:用FreeMove智能迁移Windows目录,彻底告别C盘空间焦虑 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 你是否曾因C盘空间不足而…...

从零到一:杰里AC695N Soundbox SDK 2.0.0 任务模式切换全解析(附完整代码示例)

从零到一:杰里AC695N Soundbox SDK 2.0.0 任务模式切换全解析(附完整代码示例) 在嵌入式音频开发领域,杰里AC695N芯片凭借其出色的音频处理能力和灵活的软件开发套件(SDK),已成为Soundbox方案的…...

Ctrl快捷键大全

一、基础操作快捷键功能Ctrl C复制选中的内容Ctrl V粘贴已复制/剪切的内容Ctrl X剪切选中的内容Ctrl Z撤销上一步操作Ctrl Y恢复/重做(撤销的反操作)Ctrl A全选当前页面或文档中的所有内容Ctrl S保存当前文件Ctrl F 打开“查找”窗口&#xff08…...

频谱仪进阶功能完全指南:从窄脉冲测量到非线性测试

这不是一篇入门帖。如果你已经会看谱线、会测功率,但对窄脉冲该怎么测、相位噪声的底噪从哪来、TOI 和 ACPR 之间是什么关系仍存疑问,这篇文章就是为你准备的。全文聚焦于频谱仪的进阶功能——即从脉冲测量、Zero Span、相位噪声、噪声系数,到非线性测试与通信指标的综合应用…...

保姆级教程:在STM32F407上为FreeRTOS V9.0配置SystemView V3.52(附完整源码包)

STM32F407与FreeRTOS深度集成SystemView全流程实战指南 如果你正在使用STM32F407开发板运行FreeRTOS,却苦于无法直观观察任务调度和中断行为,那么SystemView将成为你的"系统透视镜"。本文将手把手带你完成从零配置到可视化分析的全过程&#…...

STM32F103实战:用CubeMX和HAL库搞定TM1622/HT1622液晶驱动(附完整代码)

STM32F103实战:用CubeMX和HAL库高效驱动TM1622液晶模块 在嵌入式开发中,液晶显示驱动是常见需求。TM1622/HT1622作为经济实用的LCD驱动芯片,广泛应用于各类小型设备。本文将展示如何利用STM32CubeMX和HAL库快速构建稳定可靠的驱动方案&#…...

langchain入门篇

1.开发环境1.1 uvuv是一款针对Python项目的包管理工具安装:pip install uv1.2 初始化项目两种方式1.命令行创建:uv init 项目名2.使用开发工具,如下图2.快速入门导入langchainuv add langchain集成deepseekuv add langchain-deepseek集成open…...

突发奇想:除了向量库、图库,是不是还得有个“时间数据库”?

本文纯属个人突发奇想:搞RAG、搞知识图谱,都忽略了时间。如果能像Join关系表一样,关联向量、图和时序数据,是不是更接近真实世界?1. 起因:为啥突然想这个最近看了一些因果推断的东西,发现一个事…...

ngx_debug_point

1 定义 ngx_debug_point 函数 定义在 ./nginx-1.24.0/src/os/unix/ngx_process.cvoid ngx_debug_point(void) {ngx_core_conf_t *ccf;ccf (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,ngx_core_module);switch (ccf->debug_points) {case NGX_DEBUG_POINTS_…...

XXMI启动器终极指南:如何一站式管理所有热门二次元游戏模组

XXMI启动器终极指南:如何一站式管理所有热门二次元游戏模组 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 还在为管理《原神》、《崩坏:星穹铁道》、《鸣…...