Eseguire una ricerca di similarità vettoriale

La ricerca di somiglianza vettoriale, nota anche come ricerca del vicino più prossimo, in AlloyDB per PostgreSQL consente di trovare le righe del database più simili dal punto di vista semantico a un vettore di query. Dopo aver archiviato e indicizzato gli embedding, puoi utilizzare gli operatori pgvector e le funzioni di distanza per eseguire query sul tuo database AlloyDB per trovare i vicini più prossimi.

Per ulteriori informazioni sull'archiviazione dei vector embedding e sulla creazione di un indice, consulta rispettivamente Archivia i vector embedding e Crea indici.

Per eseguire una ricerca di somiglianze, specifica la tabella, la colonna di embedding, la funzione di distanza, l'embedding di destinazione e il numero di righe da restituire. Puoi anche utilizzare la funzione embedding() per tradurre il testo in un vettore e poi confrontare il vettore con gli embedding archiviati utilizzando gli operatori pgvector.

Per trovare i vicini semantici più prossimi per un vettore di embedding, puoi eseguire la seguente query di esempio, in cui imposti la stessa funzione di distanza utilizzata durante la creazione dell'indice.

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY 'EMBEDDING'
    LIMIT ROW_COUNT;

Sostituisci quanto segue:

  • TABLE: la tabella contenente l'embedding con cui confrontare il testo.

  • EMBEDDING_COLUMN: la colonna contenente gli embedding archiviati.

  • DISTANCE_FUNCTION_QUERY: la funzione di distanza da utilizzare con questa query. Scegli una delle seguenti opzioni in base alla funzione di distanza utilizzata durante la creazione dell'indice:

    • Distanza L2: <->

    • Prodotto interno: <#>

    • Distanza coseno: <=>

  • EMBEDDING: il vettore di embedding di cui vuoi trovare i vicini semantici archiviati più vicini.

  • ROW_COUNT: il numero di righe da restituire.

    Specifica 1 se vuoi solo la corrispondenza migliore.

Per saperne di più su altri esempi di query, consulta Esecuzione di query.

Puoi anche utilizzare la funzione embedding() per tradurre il testo in un vettore e trovare le righe del database con gli embedding semanticamente più simili. L'estensione PostgreSQL pgvector standard è personalizzata per AlloyDB ed è denominata vector. Applichi il vettore a uno degli operatori del vicino più prossimo di pgvector, ad esempio <=> per la distanza del coseno.

Poiché embedding() restituisce un array real, devi eseguire il cast esplicito della chiamata embedding() a vector per utilizzare questi valori con gli operatori 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;

Sostituisci quanto segue:

  • MODEL_ID: l'ID del modello su cui eseguire la query.

    Se utilizzi Model Garden, specifica text-embedding-005 come ID modello. Questi sono i modelli basati su cloud che AlloyDB può utilizzare per i text embedding. Per saperne di più, consulta Text embedding.

  • (Facoltativo) VERSION_TAG: il tag della versione del modello su cui eseguire la query. Anteponi @ al tag.

    Se utilizzi uno dei modelli in inglese text-embedding-005 con Gemini Enterprise Agent Platform, specifica uno dei tag di versione, ad esempio text-embedding-005, elencati in Versioni dei modelli.

    Google consiglia vivamente di specificare sempre il tag della versione. Se non specifichi il tag della versione, AlloyDB utilizza l'ultima versione del modello, il che potrebbe portare a risultati imprevisti.

  • TABLE: la tabella su cui eseguire la query.

  • EMBEDDING_COLUMN: la colonna contenente gli embedding archiviati.

  • TEXT: il testo da tradurre in un vector embedding.

  • ROW_COUNT: il numero di righe da restituire.

Per accelerare la ricerca KNN filtrata, puoi utilizzare il motore colonnare AlloyDB. Per saperne di più, consulta Accelera la tua Vector Search filtrata e Configura il motore colonnare.

Passaggi successivi