网页
综合
更新时间 2026-11-13 19:54:57
基于阿里云 Milvus 复刻“高德扫街榜”-阿里云开发者社区
自动蜘蛛
developer.aliyun.com
正文约 2675 字
「附近有什么好吃的?」——这是本地生活场景里最高频的一句发问。高德「扫街榜」这类产品之所以有说服力,核心在于两点:它离你近,且它是被真实吃过的人夸出来的,而不是靠商家刷分堆出来的。
把这类榜单拆开看,它需要回答三个层层递进的问题:
它的业务价值也就落在这三层上:帮用户发现附近的好店、把「近 + 对味 + 口碑好」融合成一张可解释的榜单、并且基于真实评价的语义与情感而非刷分数据。要把这三层能力捏合到一次查询里,传统技术栈会相当吃力。
要做出这样一张榜单,系统必须同时具备以下能力,缺一不可:
传统方案通常是三套系统拼接:用 PostGIS / 空间数据库做地理过滤,用向量数据库做语义召回,再用一套 NLP 服务(情感分类、摘要)做评价理解。三套系统各存一份数据,跨系统 JOIN、数据同步、一致性维护的成本极高,一次榜单查询要串起多个服务、多轮网络往返,工程复杂度和延迟都难以接受。
阿里云 Milvus 可以把上面四件事收敛到一个 Collection、一次检索里完成:
最关键的一点:地理过滤与语义检索融合在同一次 search() 调用里——ANN 向量检索负责「对味」,filter 里的 ST_ 空间函数负责「就近」,二者在一次请求内联合求解,再叠加 rerank 精排,直接产出榜单候选。
先对齐一下文中几个 AI Function 的作用:
写入时自动把评价文本转成向量(无需应用侧先调模型)
让「适合亲子的川菜馆」这类语义需求能被向量检索命中
对召回候选按与查询的相关性重新排序(精排)
具体AI Function用法参考官方文档
在进入实战代码前,先把几个贯穿全文的地理概念讲清楚。
GEOMETRY —— 把「地点」当成几何图形存起来。 普通做法是把经纬度存成两个 double 字段,数据库只把它当两个数字,并不理解「谁在谁里面、两块区域是否相交」。GEOMETRY 是 Milvus 2.6 的地理空间类型,它把「点 / 线 / 面」当作真正的几何对象存储,于是就能用 ST_* 函数做空间运算;Milvus 2.6 还为它提供了基于 R-Tree 的空间索引来加速。
WKT —— 描述几何图形的标准文本写法。 GEOMETRY 字段里存的值用 WKT 表示,常见几种:
POINT(116.4612 39.9088)
LINESTRING(116.46 39.90, 116.47 39.91)
POLYGON((116.448 39.905, ..., 116.448 39.905))
MULTIPOINT / MULTIPOLYGON
MULTIPOLYGON(((...)),((...)))
坐标顺序是「经度在前、纬度在后」(POINT(lng lat)),和口语「北纬…东经…」相反。本文坐标均为 WGS84(GPS 经纬度)。
ST_ 开头的都是空间关系函数:写进 filter 里判断门店几何与给定区域的关系,返回真 / 假。本文重点用到三个:
门店是否在商圈多边形内 / 是否在 3km 半径圆内
A 是否完全包住 B(与 WITHIN 相反)
Milvus 2.6 还有其余几个函数,可按需选用:ST_EQUALS(完全相同,去重)、ST_TOUCHES(只碰边界,如相邻商圈接壤)、ST_OVERLAPS(部分重叠,如配送区交叉)、ST_CROSSES(穿越式相交,如道路穿过商圈)。一句话记区别:WITHIN=在里面、CONTAINS=把它装住、INTERSECTS=有任何交集(最宽松)、TOUCHES=只碰边、OVERLAPS=叠一部分、CROSSES=穿过去、EQUALS=一模一样。
为了让 POINT、POLYGON、ST_WITHIN 更直观,下面把上面用到的示意坐标画到真实地图上(底图为高德地图,正文的 WGS84 坐标已做坐标系转换以精确对齐)。图一为 3km 半径圆与商圈范围的总览;图二放大到商圈级别,可见三家门店都落在商圈 POLYGON 内——正是 ST_WITHIN 判定为「真」的情形。
下面用代码表示「建库 → 入库 → 地理过滤 → 语义融合 → 精排 → 情感/摘要」全流程。
将MILVUS_HOST和MILVUS_TOKEN替换成自己的集群就可以直接看到效果
把上面的**地理过滤 → 语义检索 → rerank 精排 → 情感/摘要**串起来,就是一次完整的扫街榜生成:**地理过滤圈定「就近」候选 → 语义检索命中「对味」→ rerank 精排 → 情感/摘要补齐「口碑」**。下面是一份示例榜单输出
最终榜位可用形如 w1·相关分 + w2·好评率 + w3·距离衰减 的加权融合,权重按业务调参。「巴蜀人家」虽然不是最辣,但因「亲子友好」的语义强命中 + 高好评率 + 距离最近,综合排到第一——这正是「扫街榜」区别于「按评分排序」的地方。
传统方案(PostGIS + 向量库 + NLP 服务)
一次 search():ANN + ST_ filter
AI_SENTIMENT / AI_SUMMARIZE 内置
写入即向量化(Collection Function)
这套方案的价值可以收敛为一句话:把「空间」与「语义」放进同一个数据库、同一次检索里求解。地理空间类型让 Milvus 理解「哪里」,AI Function 让它理解「什么」和「好不好」,二者融合直接产出可解释的本地生活榜单,省掉了 PostGIS + 向量库 + NLP 三套系统的拼接与同步成本。
地理让 AI「落到地面」,AI 让地理「读懂内容」——当这两者在一个系统里协同,本地生活的每一次「附近有什么好吃的」,都能被更快、更准、更可信地回答。
阿里云 Milvus 是目前唯一支持 AI Native 的 Milvus 云服务。它不仅提供高性能、全托管的向量检索能力,更将 AI Function 与 AI-Gateway 原生嵌入数据链路,让模型能力真正成为数据库的一部分。
从数据进入阿里云Milvus 的那一刻起,理解、加工、检索和生成便可以在一条原生链路中完成。阿里云 Milvus 正在把“接入 AI”变成“原生拥有 AI”。
关注阿里云公众号或下载阿里云APP,关注云资讯,随时随地运维管控云服务
© 2009-现在 Aliyun.com 版权所有 增值电信业务经营许可证: 浙B2-20080101 域名注册服务机构许可: 浙D3-20210002
本页为82搜索生成的网页快照,内容来自站内索引;演示数据的原文链接仅作示例。