运行向量相似度搜索

本文档介绍了如何使用 pgvector 扩展程序在 AlloyDB for PostgreSQL 中执行向量相似度搜索。借助矢量相似度搜索(也称为最近邻搜索),您可以查找数据中与给定查询向量最相似的数据点。

存储和编入索引嵌入后,您可以查询 AlloyDB 数据库以查找语义上相似的矢量。使用 pgvector 查询地图项来查找嵌入向量的最近邻。

如需详细了解如何存储矢量嵌入和创建索引,请分别参阅存储矢量嵌入创建索引

如需运行相似搜索,请指定表、嵌入列、距离函数、目标嵌入和要返回的行数。您还可以使用 embedding() 函数将文本转换为向量,然后使用 pgvector 运算符将向量与存储的嵌入进行比较。

如需查找嵌入向量的最近邻语义,您可以运行以下示例查询,并在其中设置与在创建索引期间使用的距离函数相同的距离函数。

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
    LIMIT ROW_COUNT

替换以下内容:

  • TABLE:包含要与文本进行比较的嵌入的表。

  • EMBEDDING_COLUMN:包含存储的嵌入的列。

  • DISTANCE_FUNCTION_QUERY:要与此查询搭配使用的距离函数。根据创建索引时使用的距离函数,选择以下任一选项:

    • L2 距离<->

    • 内积<#>

    • 余弦距离<=>

  • EMBEDDING:您要查找其最近的已存语义邻居的嵌入向量。

  • ROW_COUNT:要返回的行数。

    如果您只希望获得单个最佳匹配,请指定 1

如需详细了解其他查询示例,请参阅查询

您还可以使用 embedding() 函数将文本转换为向量。标准 pgvector PostgreSQL 扩展程序已针对 AlloyDB 进行了自定义,并称为 vector。您可以将该向量应用于 pgvector 中的某个最近邻运算符(例如,用于 L2 距离的 <->),以查找在语义上最相似的嵌入数据库行。

由于 embedding() 会返回 real 数组,因此您必须将 embedding() 调用显式转换为 vector,才能将这些值与 pgvector 运算符搭配使用。

  CREATE EXTENSION IF NOT EXISTS google_ml_integration VERSION '1.2';
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

替换以下内容:

  • MODEL_ID:要查询的模型的 ID。

    如果您使用的是 Vertex AI Model Garden,请将 text-embedding-005 指定为模型 ID。以下是 AlloyDB 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入

  • 可选:VERSION_TAG:要查询的模型的版本标记。在该标记前面加上 @

    如果您将 text-embedding-005 英语模型之一与 Vertex AI 搭配使用,请指定 模型版本中列出的某个版本标记,例如 text-embedding-005

    Google 强烈建议您始终指定版本标记。如果您未指定版本标记,AlloyDB 将使用最新的模型版本,这可能会导致意外结果。

  • TEXT:要转换为向量嵌入的文本。

后续步骤