运行向量相似度搜索

本文档介绍了如何使用 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:要转换为向量嵌入的文本。

后续步骤