本文来源公众号“Zilliz”,仅用于学术分享,侵权删,干货满满。
原文链接:https://mp.weixin.qq.com/s/neCqyfed0GzV4SeCTQpMdg
本文为Milvus Week系列第三篇,该系列旨在分享Milvus的创新与实践成果,以下是DAY3内容划重点:
Milvus2.6中,Zilliz借助Geolocation Index for Milvus,首次将地理空间数据与向量检索融合,使 AI 可以在理解语义的同时,理解空间。
在当今的智能时代,地理位置(Geolocation)信息,已经结合 AI 推荐、智能调度、自动驾驶等场景,成为理解世界、做出决策的关键数据。
比如,当我们在 Doordash 或 美团 上点餐时,除了会关注用户与餐厅之间的距离,还会综合考虑餐厅评分、骑手位置、交通状况、以及用户个人偏好向量等综合数据。
再比如, 当自动驾驶车辆在城市道路上行驶时,结合地理位置信息,它需要在毫秒级时间内完成路径规划、障碍物检测和场景语义理解。
而实现这一切,都离不开对地理空间数据的高效索引与检索。
过去,地理数据与向量数据往往存在于两套系统中:
-
一套用于存储坐标与空间关系(如经纬度、多边形区域等);
-
另一套用于 AI 模型生成的语义嵌入与相似性检索。
这种割裂导致了系统复杂、数据同步困难、查询效率低下的问题。
为了解决以上问题,在最新的Milvus2.6中,Zilliz借助Geolocation Index for Milvus,首次将地理空间数据(Geometry)与向量检索(Vector Search)有机融合,使 AI 可以在理解语义的同时,理解空间。
通过引入基于 R-Tree 的空间索引机制,Milvus 不仅支持高维向量相似搜索,还能执行高效的地理空间查询(如 st_contains、st_within、st_distance 等),让空间感知的智能检索成为现实。
这意味着,无论是本地生活平台想要为用户找到“此刻最近、最合适的美食”,还是自动驾驶系统需要判断“车辆是否即将进入禁行区域”,Milvus 都能以统一的数据存储与查询方式完成。
01 本地生活服务:让智能推荐更懂附近有什么你爱吃的
以 Doordash 和 美团 为例,这类平台每天要在上亿次请求中完成复杂的地理计算。消费者打开 App 的那一刻,系统就要基于位置、时间、口味偏好、配送时长、实时交通等维度,计算出此刻、此地最合适的餐厅或骑手。
传统方案通常需要分别查询地理数据库与推荐系统,然后再进行多轮过滤与排序。Milvus 的 Geolocation Index 让这一流程显著简化:
-
统一存储:地理坐标与用户画像、商户向量嵌入存储在同一系统中。
-
联合检索:既能基于“距离我 3 公里以内的商户”筛选,又能基于相似口味或评分进行向量搜索。
-
动态决策:结合实时骑手分布和交通状况,快速匹配最近可用骑手。
最终,平台可以在一次检索中完成空间 + 语义的双维度决策。例如,当用户搜索“咖喱饭”,系统不仅返回文本匹配度高的商户,还能在用户当前位置附近优先推荐配送速度更快、口味相似度更高的选项。
02 自动驾驶:让车辆决策更智能
在自动驾驶场景中,地理空间索引是感知、定位、决策的基础数据结构之一。车辆需要在毫秒级时间内完成地图匹配、障碍物检测和路径规划。
Milvus 的 Geometry 类型结合 R-Tree 索引,可以存储和检索各种几何形状数据,例如:
-
道路边界(LineString)
-
交通标识区域(Polygon)
-
障碍物(Point)
这些数据可以被高效地索引和查询,做到让地理数据真正参与到 AI 决策闭环中。例如,自动驾驶系统可通过 R-Tree 快速判断当前车辆坐标是否位于某个道路区域内,或相交于前方障碍物区域。
同时,结合向量嵌入(如感知模块生成的场景向量),系统还可实现更智能的语义检索,如:在 50 米范围内寻找与当前交通模式最相似的历史片段,帮助模型快速理解场景并优化决策。
03 Milvus 的升级:Geometry+ R-Tree +语义
(1)Geometry:最常用的原生地理空间数据类型
Zilliz 在 Milvus 2.6 中引入了一个关键能力:原生地理空间数据类型 Geometry。这使得向量数据库首次具备了理解地理的能力。
Milvus 的 Geometry 类型不仅支持点(Point),还支持线(LineString)、多边形(Polygon)等复杂空间结构。
这样一来,Milvus 可以直接存储:商户位置(Point)、配送区域(Polygon)、无人车行驶轨迹(LineString),从单纯的向量数据库,升级为同时支持 空间数据 + 语义向量 的多模态数据库。
Geometry 类型的数据使用 WKT(Well-Known Text), 例如:
data = [ { "id": 1, "geo": "POINT(116.4074 39.9042)", "vector": vector, }]
(2)R-Tree:为Geometry 打造的空间索引
有了 Geometry 类型,还需要高效的空间检索筛选能力。
Milvus 通过两阶段筛选(粗筛+精筛)对地理数据进行精确过滤。
-
粗筛:通过 R-Tree 等空间索引进行快速剪枝
-
精筛:对查询区域的边角区域进行精确过滤
在这个过程中, Milvus 引入了经典的空间索引结构 —— R-Tree (Rectangle Tree)。
R-Tree 是专为多维空间数据(尤其是 Geometry 几何类型,如点、线、面、多边形等)设计的平衡树索引结构,其核心逻辑是通过最小边界矩形(MBR, Minimum Bounding Rectangle)把空间对象分组,形成类似 B-Tree 的层级结构,通过空间近似与分层索引解决几何对象的高效检索问题。

-
每个节点都保存一个包围盒(bounding box)
-
查询时可以快速“剪枝”,仅访问可能相交的区域
-
平均查询复杂度为 O(log N)
-
Milvus 使用 boost 库的 R-Tree 索引。利用其高性能、并发安全特点。
为了 R-Tree 索引提高效率,Milvus 是通过查询区域的 bounding box 与 R-Tree 索引快速筛选。对于用户传入的查询区域不规则时,R-Tree 索引会筛选出一些不符合条件的数据。这时候就需要计算查询区域与这些数据的关系从而来达到精确筛选的目的。
Milvus 内部使用 GEOS 库进行空间关系判断(如 st_within、st_intersects、st_distance等)
目前,Milvus 支持的空间过滤算子有如下几个:
-
st_intersects(A, B):计算几何空间 A 是否与几何空间 B 相交。 -
st_contains(A, B):计算几何空间 A 是否完全包含几何空间 B(不含边界)。 -
st_within(A, B):计算几何空间 A 是否完全被 B 包含 (st_contains 的反操作)。 -
st_covers(A, B):计算几何空间 A 是否完全覆盖几何空间 B (含边界)。 -
st_touches(A, B):计算几何空间 A 是否与几何空间 B 仅在边界接触。 -
st_equals(A, B):计算几何空间 A 是否与几何空间 B 完全相同。 -
st_overlaps(A, B):计算几何空间 A 是否与几何空间 B 有部分重叠。 -
st_dwithin(A, B, d):计算几何空间 A 与几何空间 B 的距离是否小于 d。
(3)向量语义 + Geo:双索引融合的架构
基于Geometry+ R-Tree 能力,Zilliz 在打造Milvus的过程中,会将 向量索引 与 地理索引 结合使用:

执行流程如下:
-
通过 R-Tree 过滤符合地理范围的数据(如 within 2km);
-
再向量索引筛选出 Top-N 相似。
04 尾声:向量 + Geo,让 AI 拥有位置感知
地理位置不仅仅是坐标,它是现实世界的语义锚点。
在 Zilliz 的新一代数据库中,向量与地理信息正逐渐融合为一种统一的数据结构:
-
支持 向量 + Geo + 时间 的联合检索;
-
支持 空间感知推荐系统;
-
支持 多模态 LBS(Location Based Search)。
未来,AI 不只是理解内容,它还将理解——内容在哪里、在何时最有意义。
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。
Milvus融合地理与向量检索
880

被折叠的 条评论
为什么被折叠?



