Questa pagina descrive come utilizzare gli embedding archiviati per generare indici ed eseguire query sugli embedding utilizzando un indice IVFFlat con AlloyDB.
Per saperne di più sull'archiviazione degli embedding, consulta
Archiviare gli embedding vettoriali.
Prima di iniziare
Prima di poter iniziare a creare gli indici, devi completare i seguenti prerequisiti.
I vettori di embedding vengono aggiunti a una tabella nel tuo database AlloyDB.
È installata la versione
0.5.0o successive dell'estensionevectorbasata supgvector, estesa da Google per AlloyDB.CREATE EXTENSION IF NOT EXISTS vector;
Crea un indice IVFFlat
pgvector di serie fornisce anche una versione dell'indice IVF denominata
IVFFlat
che offre tempi di compilazione più rapidi e ha un footprint della memoria più piccolo rispetto all'indice hnsw.
Per creare un indice IVFFlat:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Sostituisci quanto segue:
INDEX_NAME: il nome dell'indice che vuoi creare, ad esempiomy-ivf-index.TABLE: la tabella a cui aggiungere l'indice.EMBEDDING_COLUMN: una colonna che memorizza i dativector.DISTANCE_FUNCTION: la funzione di distanza da utilizzare con questo indice. Scegli una delle opzioni seguenti:Distanza L2:
vector_l2_opsProdotto interno:
vector_ip_opsDistanza coseno:
vector_cosine_ops
LIST_COUNT: il numero di elenchi da utilizzare con questo indice. Per saperne di più su come decidere questo valore, consulta Ottimizzare un indice IVFFlat.Per creare questo indice in una colonna di embedding che utilizza il tipo di dati
real[]anzichévector, esegui il cast della colonna nel tipo di dativector:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Sostituisci DIMENSIONS con la larghezza dimensionale della colonna di embedding. Per saperne di più su come trovare le dimensioni,
consulta la funzione vector_dims in Funzioni
vettoriali.
Per visualizzare lo stato di avanzamento dell'indicizzazione, utilizza la visualizzazione pg_stat_progress_create_index:
SELECT * FROM pg_stat_progress_create_index;
La colonna phase mostra lo stato attuale della creazione dell'indice.
Per ottimizzare l'indice per un richiamo target e un bilanciamento QPS, consulta Ottimizzare un
IVFFlat indice.
Esegui una query
Dopo aver archiviato e indicizzato gli embedding nel database, puoi iniziare a eseguire
query utilizzando la pgvector funzionalità di query.
Per trovare i vicini semantici più vicini 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 a cui confrontare il testo.INDEX_NAME: il nome dell'indice che vuoi utilizzare, ad esempiomy-scann-index.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
1se vuoi solo la corrispondenza migliore.
Per saperne di più su altri esempi di query, consulta Esecuzione di query.
Puoi anche utilizzare la embedding() funzione per tradurre il
testo in un vettore. Applica il vettore a uno degli
pgvector operatori del vicino più prossimo, <-> per la distanza L2, per trovare le righe del database con gli
embedding semanticamente più simili.
Poiché embedding() restituisce un array real, devi eseguire esplicitamente il cast della chiamata
embedding() a vector per utilizzare questi valori con gli operatori pgvector.
Passaggi successivi
- Crea un indice ScaNN
- Esegui ricerche sulla similarità vettoriale
- Ottimizza il rendimento delle query vettoriali
- Metriche dell'indice vettoriale
- Scopri come creare un assistente per lo shopping intelligente con AlloyDB, pgvector e la gestione degli endpoint del modello.