你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
矢量搜索是一种查找以矢量形式存储在数据库中的信息的方法。 矢量是一组数字,表示媒体的功能或特征,如文本或图像。 与传统的基于关键字的搜索方法相比,矢量是一项重大进步。 它们通过捕获和比较信息中的语义关系来提供更快、更准确的结果。
Azure 提供了多种方式来存储和搜索矢量化数据。 本文帮助架构师和开发人员了解并为其应用程序选择合适的 Azure 矢量搜索服务。
本文根据矢量搜索功能对以下服务进行了比较:
- Azure AI 搜索
- 用于 NoSQL 的 Azure Cosmos DB
- 用于 MongoDB 的 Azure Cosmos DB (vCore)
- Azure Cosmos DB for PostgreSQL
- Azure Database for PostgreSQL
- Azure SQL 数据库
架构师和开发人员应在选择候选服务和功能矩阵中从系统需求的角度比较可用服务。
选择候选服务
本部分可帮助你根据需要选择最可能的服务。 要缩小选择范围,首先要考虑系统需求。
关键要求
若要决定是否使用传统数据库解决方案或 Azure AI 搜索,请考虑你的要求,以及是否可以对数据执行实时或实时矢量搜索。 如果经常更改矢量化字段中的值,并且需要实时或准实时地搜索更改,那么传统的关系数据库或 NoSQL 数据库最适合你的方案。 同样,满足性能目标的最佳解决方案可能是使用现有数据库。 但是,如果工作负荷不需要实时或准实时矢量可搜索性,并且你可以管理矢量索引,AI 搜索可能是一个不错的选择。
如果选择传统数据库解决方案,你决定使用的特定数据库服务类型主要取决于团队的技能集和当前作的数据库。 如果已经使用了特定类型的数据库(例如,MongoDB),那么使用相同类型的数据库可能是方案中最简单的解决方案。 如功能矩阵部分所示,每个数据库服务都有一些独特的功能和矢量搜索限制。 查看该信息以确保首选数据库类型支持所需的功能。
如果成本问题是一个驱动因素,则维护现有设计可能最适合你的方案,因为引入新服务或其他数据库服务实例可能会增加新的净成本和复杂性。 使用当前数据库进行矢量搜索可能会比使用专用服务对成本产生更小的影响。
如果选择使用传统数据库而不是 AI 搜索,则默认情况下不可用一些高级搜索功能。 例如,如果想进行重新排序或混合搜索,请通过 Transact-SQL (T-SQL) 或其他编码启用该功能。
功能矩阵
本部分中的表格汇总了功能上的关键差异。
基本功能
对矢量数据类型、近似近邻(ANN)向量索引、矢量维度限制、多个向量字段和多个向量索引的本机支持有时在服务之间有所不同。 工作负荷可能依赖于其中一些特定功能。 了解每个 Azure 服务的基本矢量功能,如下表所示。
| 能力 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | 用于 MongoDB 的 Azure Cosmos DB (vCore) | Azure Database for PostgreSQL 灵活服务器 | AI 搜索 | Azure SQL 数据库 |
|---|---|---|---|---|---|---|
| 内置矢量搜索 | 是1 | 是 | 是2 | 是1 | 是3 | 是 |
| 矢量数据类型 | 是 | 是 | 是 | 是 | 是 | 是8 |
| 维度限制5 | 16,0006 或 2,000 | 5057 或 4,096 | 16,000 | 16,0006 或 2,000 | 4,096 | 1,998 (预览版)4 |
| 多个矢量字段 | 是 | 是 | 否 | 是 | 是 | 是 |
| 多个矢量索引 | 是 | 是 | 否 | 是 | 是 | 是 |
-
提供
pgvector对矢量搜索的支持,这是 PostgreSQL 的扩展。 - Azure Cosmos DB for MongoDB(vCore)支持对嵌入的矢量搜索。
- AI 搜索支持使用矢量。
-
矢量可以存储在 SQL 数据库中的
VARBINARY(8000)列或变量中。 - OpenAI 中的嵌入模型包括文本嵌入-ada-002 和文本嵌入-3-small 的 1,536 个维度,以及文本嵌入 3,072 个维度,用于文本嵌入-3-large。 Azure AI 视觉多模式嵌入模型具有 1,024 个图像和文本尺寸。
- 矢量最多可以有 16,000 个维度。 但是,通过使用倒排文件平面(IVFFlat)和分层可导航小型世界(HNSW)算法编制索引支持最多 2,000 个维度的矢量。
- 使用平面索引类型编制索引的矢量最多可以有 505 个维度。 使用量子化Flat 或 DiskANN 索引类型编制索引的矢量最多可以有 4,096 个维度。
- SQL 数据库支持矢量数据类型。
搜索方法
工作负荷通常需要将矢量搜索与全文搜索,甚至混合搜索(即全文搜索或语义搜索和矢量搜索)组合在一起。 混合搜索和重新排序的结合实现了工作负荷的高精度。 可以使用自己的代码手动实现混合搜索和重新调整,也可以考虑矢量存储如何支持此工作负荷要求。
| 搜索方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | 用于 MongoDB 的 Azure Cosmos DB (vCore) | Azure Database for PostgreSQL 灵活服务器 | AI 搜索 | Azure SQL 数据库 |
|---|---|---|---|---|---|---|
| 全文搜索 | 是1 | 是9 | 是2 | 是1 | 是3 | 是4 |
| 混合搜索 | 是5 | 是11 | 是6 | 是5 | 是7 | 是8 |
| 内置重新排序 | 否 | 是10 | 否 | 否 | 是9 | 否 |
- PostgreSQL 支持全文搜索。
- Azure Cosmos DB for MongoDB (vCore)支持使用文本索引进行搜索和查询。
- SQL Server 支持全文搜索。
- SQL Server 支持矢量数据。
- 混合搜索未作为一流功能提供,但提供了示例代码。
- Azure Cosmos DB for MongoDB(vCore)原生支持将全文搜索和矢量搜索与互惠排名融合(RRF)相结合的混合搜索。
- 混合搜索结合了全文搜索、矢量搜索和语义排名,作为 Azure AI 搜索中的一流功能提供。
- 提供了 Azure SQL 数据库和 SQL Server 的混合搜索示例。
- 语义排名是一流的功能,可重新调用全文搜索和矢量搜索的结果。
- Cosmos DB NoSQL 支持使用全文评分进行全文搜索。
- Cosmos DB NoSQL 支持混合搜索。
矢量数据索引算法
矢量数据索引是有效存储和检索矢量的能力。 此功能很重要,因为索引会影响数据源上相似性搜索和最近邻查询的速度和准确性。
索引通常基于穷尽 K 最近邻 (Ek-NN) 或 ANN 算法。 Ek-NN 逐个对所有数据点执行详尽搜索,并返回最接近的精确 k 邻居。 Ek-NN 以毫秒为单位处理少量数据;但可能会导致处理大量数据时出现延迟。
DiskANN、 HNSW 和 IVFFlat 是 ANN 算法索引。 选择适当的索引策略需要仔细考虑各种因素,例如数据集的性质、查询的特定要求和可用资源。 DiskANN 可以适应数据集中的变化,同时节省计算资源。 HNSW 在需要快速查询响应并能适应数据集变化的系统中表现出色。 IVFFlat 在硬件资源有限或查询量不高的环境中有效。
下表显示了提供的矢量数据索引类型。
| 索引方法 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | 用于 MongoDB 的 Azure Cosmos DB (vCore) | Azure Database for PostgreSQL 灵活服务器 | AI 搜索 | Azure SQL 数据库 |
|---|---|---|---|---|---|---|
| DiskANN | 是 | 是 | 是2 | 是1 | 否 | 是3 |
| E-kNN | 是 | 是 | 是 | 是 | 是 | 是 |
| HNSW | 是 | 否 | 是2 | 是 | 是 | 否 |
| IVFFlat | 是 | 否 | 是 | 是 | 否 | 否 |
| 其他 | - | 平面、量化的Flat4 | 矢量字段限制5 矢量索引限制6 |
- | - | 外部库可用7 |
- 有关详细信息,请参阅 Azure Database for PostgreSQL 灵活服务器的 DiskANN。
- 有关详细信息,请参阅 Azure Cosmos DB for MongoDB - 矢量搜索概述。
- Azure SQL 的 专用预览版 目前提供基于 DiskANN 的矢量索引。
- 有关详细信息,请参阅 矢量索引策略。
- 每个容器只能使用一个向量字段。
- 每个容器只能使用一个向量索引。
- 可以使用 Scikit Learn 或 FAISS 等外部库创建索引。
相似性和距离计算功能
矢量搜索有 余弦相似性、 点积和 Euclidean 距离 计算方法。 这些方法用于计算两个矢量之间的相似性或两个矢量之间的距离。
初步数据分析受益于指标和 Euclidean 距离,这允许提取对数据结构的不同见解。 文本分类通常在 Euclidean 距离下表现更好。 使用余弦相似度通常可以更好地检索与给定文本最相似的文本。
Azure OpenAI 嵌入依赖于余弦相似性来计算文档和查询之间的相似性。
| 内置矢量比较计算 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | 用于 MongoDB 的 Azure Cosmos DB (vCore) | Azure Database for PostgreSQL 灵活服务器 | AI 搜索 | Azure SQL 数据库 |
|---|---|---|---|---|---|---|
| 余弦相似度 | 是 | 是1 | 是 | 是 | 是 | 是2 |
| 欧几里得距离(L2 距离) | 是 | 是1 | 是 | 是 | 是 | 是2 |
| 点积 | 是 | 是1 | 是 | 是 | 是 | 是2 |
与 Azure OpenAI 和其他组件集成
实现矢量搜索时,还可以考虑与其他Microsoft组件链接。 例如,Azure OpenAI 可帮助你为数据创建矢量,并为矢量相似性搜索创建输入查询。
| 能力 | Azure Cosmos DB for PostgreSQL | Azure Cosmos DB for NoSQL | 用于 MongoDB 的 Azure Cosmos DB (vCore) | Azure Database for PostgreSQL 灵活服务器 | AI 搜索 | Azure SQL 数据库 |
|---|---|---|---|---|---|---|
| Azure OpenAI - 添加自己的数据 | 否 | 否 | 是1 | 否 | 是2 | 否 |
| 使用 Azure OpenAI 嵌入矢量 | 否 | 否 | 否 | 是3 | 是4 | 是5 |
| 与语义内核集成 | 是6 | 是7 | 是8 | 是6 | 是9 | 是10 |
- Azure Cosmos DB for MongoDB (vCore) 支持作为 Azure OpenAI 数据数据源。
- AI 搜索作为 Azure OpenAI 数据的 数据源受支持 。
- Azure AI 扩展可用。
- AI 搜索提供了一种向量化分块文本的技能。
- 可以为嵌入模型部署创建一个存储过程。
- 此服务作为内存连接器和向量数据库连接器都受支持。 有关详细信息,请参阅 C# 文档。
- 此服务作为内存连接器和向量数据库连接器都受支持。 文档适用于 C# 和 Python。
- 此服务作为矢量数据库连接器受支持。 文档适用于 C# 和 Python。
- 此服务作为内存连接器和向量数据库连接器都受支持。 文档适用于 C# 和 Python。
- 此服务作为 内存连接器受支持。
贡献者
Microsoft维护本文。 以下参与者撰写了本文。
主要作者:
- Keita Onabuta |高级解决方案工程师
- Yu Saito |解决方案工程师
若要查看非公开的LinkedIn个人资料,请登录LinkedIn。
后续步骤
- 使用 AI 搜索实现知识挖掘
- 智能应用程序和 AI
- 使用 Azure SQL 和 Azure OpenAI 进行矢量相似性搜索
- Azure SQL 和 SQL Server 中的本机矢量支持
- Azure Cosmos DB 中的矢量数据库
- Azure 矢量数据库示例