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