本文說明如何使用 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 最近鄰運算子,例如餘弦距離的 <=>。
由於 embedding() 會傳回 real 陣列,您必須明確將 embedding() 呼叫轉換為 vector,才能搭配 pgvector 運算子使用這些值。
CREATE EXTENSION IF NOT EXISTS vector;
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN::vector
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')
LIMIT ROW_COUNT
更改下列內容:
MODEL_ID:要查詢的模型 ID。如果使用 Model Garden,請指定
text-embedding-005做為模型 ID。這些是 AlloyDB 可用於文字嵌入的雲端模型。詳情請參閱「文字嵌入」。選用:
VERSION_TAG:要查詢的模型版本標記。在標記開頭加上@。如果您使用 Gemini Enterprise Agent Platform 搭配其中一個
text-embedding-005英文模型,請指定其中一個版本標記,例如「text-embedding-005」,如「模型版本」一文所列。Google 強烈建議您一律指定版本標記。如未指定版本標記,AlloyDB 會使用最新模型版本,這可能會導致非預期的結果。
TABLE:要查詢的資料表。EMBEDDING_COLUMN:包含儲存的嵌入內容的資料欄。TEXT:要翻譯成向量嵌入的文字。ROW_COUNT:要傳回的列數。
如要加快 KNN 篩選搜尋速度,可以使用 AlloyDB 資料欄引擎。詳情請參閱「加快篩選後的向量搜尋速度」(預覽版) 和「設定直欄式引擎」。