本页介绍了向量搜索及其在 Spanner 中的运作方式。
矢量搜索是一项高性能的内置功能,可对高维矢量数据进行语义搜索和相似度匹配。通过直接在事务型数据库中存储和索引向量嵌入,Spanner 无需单独的向量数据库和复杂的 ETL 流水线。
主要概念
本部分将介绍向量搜索的以下关键概念:
- 向量嵌入
- 搜索方法(KNN 和 ANN)
- 距离函数
向量嵌入
向量嵌入是非结构化数据的高维数值表示法。它们是使用机器学习模型从非结构化数据中生成的。例如,您可以使用 Vertex AI 文本嵌入 API 为存储在 Spanner 中的数据生成、存储和更新文本嵌入。
搜索方法
Spanner 支持两种查找相似向量的方法:
K 最近邻 (KNN):通过计算查询与数据集中每个向量之间的距离来执行精确搜索。它可提供更准确的召回率,但对于海量数据集而言,计算成本较高。
近似最近邻 (ANN):使用向量索引(基于 Google 的 ScaNN 算法)在大量向量中快速查找匹配项。它会牺牲少量准确率(召回率),以换取速度和可伸缩性提升。
主要功能
可伸缩性:支持数十亿个向量,用于非分区 ANN 搜索;或支持数万亿个向量,用于分区 KNN 工作负载。
统一的 AI 数据库和引擎:使用 GoogleSQL
ML.PREDICT或 PostgreSQLspanner.ML_PREDICT_ROW函数,直接在查询流程中从 Vertex AI 模型生成嵌入。内嵌过滤:高效地将向量搜索与结构化元数据过滤条件(例如“查找类别为‘鞋子’且价格低于 100 的类似图片”)相结合,而不会损失性能。
LangChain 集成:内置对 LangChain 的支持,可让您使用 Spanner 作为向量存储区来构建检索增强生成 (RAG) 应用。
混合搜索功能
将矢量搜索与 Spanner 的其他数据功能结合使用时,效果最佳:
| 组合 | 有利 |
|---|---|
| 使用 SQL 过滤进行向量搜索 | 高效地将向量搜索与过滤条件相结合(例如“查找类别为‘鞋子’且价格低于 100 的类似图片”)。 |
| 向量搜索 + 全文搜索 | 使用倒数排序融合 (RRF) 将语义相似度与关键字精确度相结合,以实现出色的搜索相关性。 |
| 向量 + 图表 | 使用向量搜索在属性图中查找相关入口点(节点),然后遍历复杂的关系。 |
后续步骤
- 详细了解 Spanner AI。
- 详细了解如何获取 Vertex AI 文本嵌入。
- 详细了解如何执行 K 最近邻 (KNN) 搜索。
- 详细了解如何执行近似最近邻 (ANN) 搜索。