本文档介绍了如何使用 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
。
如需详细了解其他查询示例,请参阅查询。
使用 pgvector
和文本输入运行相似度搜索
您还可以使用 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
:要转换为向量嵌入的文本。