AlloyDB for PostgreSQL 的向量相似度搜尋 (又稱最鄰近搜尋) 可讓您在資料庫中,找出語意與查詢向量最相似的資料列。儲存及建立嵌入索引後,您可以使用 pgvector 運算子和距離函式,查詢 AlloyDB 資料庫中的最鄰近項目。
如要進一步瞭解如何儲存向量嵌入和建立索引,請分別參閱「儲存向量嵌入」和「建立索引」。
使用向量輸入執行相似度搜尋
如要執行相似度搜尋,請指定資料表、嵌入資料欄、距離函式、目標嵌入,以及要傳回的資料列數量。您也可以使用 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
<=> google_ml.embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
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 資料欄引擎。詳情請參閱「加速篩選向量搜尋」和「設定資料欄引擎」。