Milvus 2.6 将地理空间过滤和向量搜索与几何字段和 RTREE 结合在一起
随着人工智能系统越来越多地应用于实时决策,地理空间数据在越来越多的应用中变得越来越重要--尤其是那些在物理世界中操作或跨真实地点为用户提供服务的应用。
考虑一下 DoorDash 或 Uber Eats 这样的送餐平台。当用户下订单时,系统并不是简单地计算两点之间的最短距离。它需要评估餐厅质量、快递可用性、实时交通状况、服务区域,以及越来越多代表个人偏好的用户和物品嵌入。同样,自动驾驶汽车必须在严格的延迟限制条件下(通常在几毫秒内)执行路径规划、障碍物检测和场景级语义理解。在这些领域,有效的决策取决于空间约束与语义相似性的结合,而不是将它们视为独立的步骤。
然而,在数据层,空间数据和语义数据历来由不同的系统处理。
地理空间数据库和空间扩展旨在存储坐标、多边形和空间关系(如包含或距离)。
向量数据库处理代表数据语义的向量 Embeddings。
当应用程序同时需要这两种数据时,往往被迫进入多阶段查询管道--在一个系统中按位置进行过滤,然后在另一个系统中执行向量搜索。这种分离增加了系统的复杂性,增加了查询延迟,并且难以有效地大规模执行空间语义推理。
Milvus 2.6通过引入几何字段(Geometry Field)解决了这一问题,它允许将向量相似性搜索与空间约束直接结合起来。这样就可以实现以下用例
位置服务(LBS):"查找该城市街区内的相似 POI
多模式搜索:"检索该点 1km 范围内的相似照片
地图与物流:"区域内的资产 "或 "与路径相交的路线"
配合新的RTREE 索引--一种针对空间过滤进行了优化的树形结构--Milvus 现在支持高效的地理空间操作符,如st_contains 、st_within 和st_dwithin 以及高维向量搜索。它们的结合使空间感知智能检索不仅成为可能,而且非常实用。
在这篇文章中,我们将介绍几何字段和 RTREE 索引的工作原理,以及它们如何与向量相似性搜索相结合,从而实现现实世界中的空间语义应用。
什么是 Milvus 中的几何字段?
在 Milvus 中,几何字段是一种 Schema 定义的数据类型 (DataType.GEOMETRY) ,用于存储几何数据。与只处理原始坐标的系统不同,Milvus 支持一系列空间结构,包括点(Point)、线字符串(LineString)和多边形(Polygon)。
这样,就可以在存储语义向量的同一个数据库中表示真实世界的概念,如餐厅位置(点)、配送区域(多边形)或自动驾驶汽车轨迹(LineString)。换句话说,Milvus 成为了一个统一的系统,既能显示某物的位置,也能显示其含义。
几何值使用已知文本(WKT)格式存储,这是一种用于插入和查询几何数据的人类可读标准。由于 WKT 字符串可以直接插入 Milvus 记录,因此简化了数据摄取和查询。例如
data = [
{
"id": 1,
"geo": "POINT(116.4074 39.9042)",
"vector": vector,
}
]
什么是 RTREE 索引及其工作原理?
Milvus 引入几何数据类型后,还需要一种有效的方法来过滤空间对象。Milvus 使用两阶段空间过滤管道来处理这个问题:
粗过滤:使用 RTREE 等空间索引快速缩小候选对象的范围。
精细过滤:对剩余的候选对象进行精确的几何检查,确保边界的正确性。
这种设计兼顾了性能和准确性。空间索引会积极删除不相关的数据,而精确的几何检查则能确保包含、交叉和距离阈值等操作符的结果正确无误。
该管道的核心是RTREE(矩形树),这是一种空间索引结构,旨在加快几何数据的查询速度。RTREE 使用最小边界矩形 (MBR) 对对象进行分层组织,允许在执行查询时跳过大部分搜索空间。
第 1 阶段:构建 RTREE 索引
RTREE 的构建遵循一个自下而上的过程,将附近的空间对象分组到越来越大的边界区域中:
1.创建叶节点:对于每个几何对象,计算其最小边界矩形 (MBR)- 即完全包含该对象的最小矩形,并将其存储为叶节点。
2.组合成更大的方框:将附近的叶节点分组,并将每个分组包裹在一个新的 MBR 内,生成内部节点。
3.添加根节点:创建一个根节点,其 MBR 覆盖所有内部组,形成一个高度平衡的树形结构。
第二阶段:加速查询
1.形成查询 MBR:为查询中使用的几何图形计算 MBR。
2.修剪分支:从根节点开始,将查询 MBR 与每个内部节点进行比较。跳过 MBR 与查询 MBR 不相交的任何分支。
3.收集候选节点:下降到相交的分支,收集候选叶节点。
4.执行精确匹配:对于每个候选节点,运行空间谓词以获得精确结果。
RTREE 为何快速
RTREE 在空间过滤方面的强大性能得益于几个关键的设计特点:
每个节点都存储一个 MBR:每个节点都近似其子树中所有几何图形的面积。这使得在查询过程中很容易决定是否要探索某个分支。
快速剪枝:只探索 MBR 与查询区域相交的子树。无关区域将被完全忽略。
随数据大小扩展:RTREE 支持在O(log N)时间内进行空间搜索,即使数据集不断扩大,也能实现快速查询。
Boost.Geometry 实现:Milvus 使用Boost.Geometry 构建 RTREE 索引,Boost.Geometry 是一个广泛使用的 C++ 库,提供优化的几何算法和线程安全的 RTREE 实现,适合并发工作负载。
支持的几何操作符
Milvus 提供了一组空间操作符,允许您根据几何关系过滤和检索实体。这些操作符对于需要了解对象在空间中如何相互关联的工作负载至关重要。
下表列出了 Milvus 当前可用的几何操作符。
| 操作符 | 说明 |
|---|---|
| st_intersects(A, B) | 如果几何图形 A 和 B 至少有一个公共点,则返回 TRUE。 |
| st_contains(A, B) | 如果几何体 A 完全包含几何体 B(不包括边界),则返回 TRUE。 |
| st_within(A, B) | 如果几何体 A 完全包含在几何体 B 中,则返回 TRUE。 |
| st_covers(A, B) | 如果几何体 A 覆盖了几何体 B(包括边界),则返回 TRUE。 |
| st_touches(A, B) | 如果几何体 A 和 B 在边界处相交,但内部不相交,则返回 TRUE。 |
| st_equals(A, B) | 如果几何图形 A 和 B 在空间上相同,则返回 TRUE。 |
| st_overlaps(A, B) | 如果几何图形 A 和 B 部分重叠,且都不完全包含其他几何图形,则返回 TRUE。 |
| st_dwithin(A, B, d) | 如果 A 和 B 之间的距离小于d,则返回 TRUE。 |
如何结合地理位置索引和向量索引
有了地理位置支持和 RTREE 索引,Milvus 可以在一个工作流程中将地理空间过滤与向量相似性搜索结合起来。该过程分为两个步骤:
1.使用 RTREE 按位置过滤:Milvus 首先使用 RTREE 索引将搜索范围缩小到指定地理范围内的实体(如 "2 公里内")。
2.使用向量搜索按语义排序:从剩余的候选结果中,向量索引根据 Embeddings 相似度选出 Top-N 最相似的结果。
地理向量检索的实际应用案例
1.配送服务:更智能的位置感知推荐
DoorDash 或 Uber Eats 等平台每天要处理数以亿计的请求。在用户打开应用程序的那一刻,系统必须根据用户的位置、时间、口味偏好、预计送达时间、实时交通情况和快递员的可用性来确定哪些餐厅或快递员是当前最匹配的。
传统上,这需要查询地理空间数据库和单独的推荐引擎,然后进行多轮筛选和重新排序。有了地理位置索引,Milvus 极大地简化了这一工作流程:
统一存储--餐厅坐标、快递地点和用户偏好 Embeddings 都在一个系统中。
联合检索- 首先应用空间过滤器(例如,3 公里内的餐馆),然后使用向量搜索按相似度、口味偏好或质量进行排序。
动态决策--结合实时快递分布和交通信号,快速分配最近、最合适的快递。
这种统一方法使平台能够在单个查询中执行空间和语义推理。例如,当用户搜索 "咖喱饭 "时,Milvus 会检索与语义相关的餐厅,并优先选择附近、配送速度快且符合用户历史口味特征的餐厅。
2.自动驾驶:更智能的决策
在自动驾驶中,地理空间索引是感知、定位和决策的基础。车辆必须不断对准高清地图,检测障碍物,规划安全轨迹--所有这些都必须在几毫秒内完成。
通过 Milvus,几何类型和 RTREE 索引可以存储和查询丰富的空间结构,例如
道路边界(LineString)
交通管制区(多边形)
检测到的障碍物(点)
可以对这些结构进行高效索引,使地理空间数据直接参与人工智能决策循环。例如,只需通过 RTREE 空间谓词,自动驾驶汽车就能快速确定其当前坐标是否位于特定车道内或与限制区域相交。
当与感知系统生成的向量嵌入(例如捕捉当前驾驶环境的场景嵌入)相结合时,Milvus 可以支持更高级的查询,例如检索半径 50 米范围内与当前类似的历史驾驶场景。这有助于模型更快地解读环境,做出更好的决策。
结论
地理定位不仅仅是经度和纬度。在位置敏感型应用中,它提供了有关事件发生地点、实体空间关系以及这些关系如何影响系统行为的重要背景信息。当地理空间数据与来自机器学习模型的语义信号相结合时,就能实现更丰富的查询,而在单独处理空间和向量数据时,这些查询难以表达或执行效率低下。
通过引入几何字段和 RTREE 索引,Milvus 将向量相似性搜索和空间过滤整合到了一个单一的查询引擎中。这样,应用程序就可以跨向量、地理空间数据和时间执行联合检索,支持空间感知推荐系统、基于位置的多模式搜索以及区域或路径受限分析等用例。更重要的是,它消除了在专业系统之间移动数据的多级管道,从而降低了架构的复杂性。
随着人工智能系统不断向现实世界的决策靠拢,了解哪些内容是相关的将越来越需要与它的适用范围和适用时间相匹配。Milvus 为这类空间语义工作负载提供了构建模块,其方式既具有表现力,又切实可行,适合大规模操作。
有关几何字段和 RTREE 索引的更多信息,请查看下面的文档:
有问题或想深入了解最新 Milvus 的任何功能?加入我们的 Discord 频道或在 GitHub 上提交问题。您还可以通过 Milvus Office Hours 预订 20 分钟的一对一课程,以获得见解、指导和问题解答。
了解有关 Milvus 2.6 功能的更多信息
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



