Spanner 向量搜索概览

本页介绍了向量搜索及其在 Spanner 中的运作方式。

矢量搜索是一项高性能的内置功能,可对高维矢量数据进行语义搜索和相似度匹配。通过直接在事务型数据库中存储和索引向量嵌入,Spanner 无需单独的向量数据库和复杂的 ETL 流水线。

主要概念

本部分将介绍向量搜索的以下关键概念:

  • 向量嵌入
  • 搜索方法(KNN 和 ANN)
  • 距离函数

向量嵌入

向量嵌入是非结构化数据的高维数值表示法。它们是使用机器学习模型从非结构化数据中生成的。例如,您可以使用 Vertex AI 文本嵌入 API 为存储在 Spanner 中的数据生成、存储和更新文本嵌入

搜索方法

Spanner 支持两种查找相似向量的方法:

  • K 最近邻 (KNN):通过计算查询与数据集中每个向量之间的距离来执行精确搜索。它可提供更准确的召回率,但对于海量数据集而言,计算成本较高。

  • 近似最近邻 (ANN):使用向量索引(基于 Google 的 ScaNN 算法)在大量向量中快速查找匹配项。它会牺牲少量准确率(召回率),以换取速度和可伸缩性提升。

主要功能

  • 可伸缩性:支持数十亿个向量,用于非分区 ANN 搜索;或支持数万亿个向量,用于分区 KNN 工作负载。

  • 统一的 AI 数据库和引擎:使用 GoogleSQL ML.PREDICTPostgreSQL spanner.ML_PREDICT_ROW 函数,直接在查询流程中从 Vertex AI 模型生成嵌入。

  • 内嵌过滤:高效地将向量搜索与结构化元数据过滤条件(例如“查找类别为‘鞋子’且价格低于 100 的类似图片”)相结合,而不会损失性能。

  • LangChain 集成:内置对 LangChain 的支持,可让您使用 Spanner 作为向量存储区来构建检索增强生成 (RAG) 应用。

混合搜索功能

将矢量搜索与 Spanner 的其他数据功能结合使用时,效果最佳:

组合 有利
使用 SQL 过滤进行向量搜索 高效地将向量搜索与过滤条件相结合(例如“查找类别为‘鞋子’且价格低于 100 的类似图片”)。
向量搜索 + 全文搜索 使用倒数排序融合 (RRF) 将语义相似度与关键字精确度相结合,以实现出色的搜索相关性。
向量 + 图表 使用向量搜索在属性图中查找相关入口点(节点),然后遍历复杂的关系。

后续步骤