本文說明如何使用 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-005text-embedding-005Google 強烈建議您一律指定版本標記。如未指定版本標記,AlloyDB Omni 會使用最新模型版本,可能導致非預期的結果。
TABLE:要查詢的資料表。EMBEDDING_COLUMN:包含儲存嵌入的資料欄。TEXT:要轉換成向量嵌入的文字。ROW_COUNT:要傳回的列數。
如要加快篩選後的 KNN 搜尋速度,可以使用 AlloyDB Omni 資料欄引擎。詳情請參閱「加速篩選向量搜尋」和「設定資料欄引擎」。