執行向量相似度搜尋

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。

如要進一步瞭解其他查詢範例,請參閱「查詢」。

您也可以使用 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 資料欄引擎。詳情請參閱「加速篩選向量搜尋」和「設定資料欄引擎」。

後續步驟