本文档介绍了如何使用 pgvector 扩展程序在 AlloyDB Omni 中执行向量相似度搜索。借助向量相似度搜索(也称为最近邻搜索),您可以在数据中查找与给定查询向量最相似的数据点。
在存储嵌入并为其编制索引后,您可以向 AlloyDB Omni 数据库查询语义相似的向量。使用 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。
如需详细了解其他查询示例,请参阅 pgvector 文档中的查询。
使用 pgvector 和文本输入运行相似度搜索
您还可以使用 embedding() 函数将文本转换为向量,并查找具有语义最相似的嵌入的数据库行。原生 pgvector PostgreSQL 扩展程序是针对 AlloyDB Omni 自定义的,称为 vector。您可以将向量应用于某个 pgvector 最近邻运算符(例如适用于余弦距离的 <=>)。
由于 embedding() 会返回 real 数组,因此您必须明确将 embedding() 调用转换为 vector,以便将这些值与 pgvector 运算符结合使用。
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
LIMIT ROW_COUNT;
替换以下内容:
MODEL_ID:要查询的模型的 ID。如果您使用的是 Model Garden,请将
text-embedding-005指定为模型 ID。这些是 AlloyDB Omni 可用于文本嵌入的云端模型。如需了解详情,请参阅文本嵌入。(可选)
VERSION_TAG:要查询的模型的版本标记。在标记前面添加@。如果您将某个
text-embedding-005英语模型与 Vertex AI 搭配使用,请指定模型版本中列出的某个版本标记,例如text-embedding-005。Google 强烈建议您始终指定版本标记。如果您未指定版本标记,AlloyDB Omni 将使用最新的模型版本,这可能会导致意外结果。
TABLE:要查询的表。EMBEDDING_COLUMN:包含存储的嵌入的列。TEXT:要转换为向量嵌入的文本。ROW_COUNT:要返回的行数。
如需加速过滤后的 KNN 搜索,您可以使用 AlloyDB Omni 列式引擎。如需了解详情,请参阅加快过滤的 Vector Search 速度和配置列式引擎。