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

执行流程如下:
地理位置不仅仅是坐标,它是现实世界的语义锚点。
在 Zilliz 的新一代数据库中,向量与地理信息正逐渐融合为一种统一的数据结构:
未来,AI 不只是理解内容,它还将理解——内容在哪里、在何时最有意义。

张财
Zilliz Senior Software Engineer
文章来自于“Zilliz”,作者 “张财”。
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI