Questa pagina descrive come utilizzare gli embedding archiviati per generare indici e eseguire query sugli embedding utilizzando gli indici ScaNN
, IVF
, IVFFlat
e HNSW
con AlloyDB per PostgreSQL.
Per saperne di più su come memorizzare gli embedding, consulta
Memorizzare gli embedding di vettori.
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 database AlloyDB.
L'estensione
vector
versione0.5.0
o successiva basata supgvector
, estesa da Google per AlloyDB è installata.CREATE EXTENSION IF NOT EXISTS vector;
Per generare indici
ScaNN
, installa l'estensionealloydb_scann
oltre all'estensionevector
.CREATE EXTENSION IF NOT EXISTS alloydb_scann;
Crea un indice
Puoi creare uno dei seguenti tipi di indici per le tabelle del database.
Crea un indice ScaNN
AlloyDB alloydb_scann
, un'estensione PostgreSQL sviluppata da Google che implementa un indice di primo vicino molto efficiente basato sull'algoritmo ScaNN.
L'indice ScaNN
è un indice di quantizzazione basato su albero per la ricerca approssimativa del vicino più prossimo. Offre tempi di creazione dell'indice inferiori e un utilizzo della memoria inferiore rispetto a HNSW
. Inoltre, offre un QPS più elevato rispetto a HNSW
in base al carico di lavoro.
Indice ScaNN
ad albero a due livelli
Per applicare un indice ad albero a due livelli utilizzando l'algoritmo ScaNN a una colonna contenente incorporamenti vettoriali archiviati, esegui la seguente query DDL:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (num_leaves=NUM_LEAVES_VALUE);
Sostituisci quanto segue:
INDEX_NAME
: il nome dell'indice da creare, ad esempiomy-scann-index
. I nomi degli indici vengono condivisi nel database. Assicurati che ogni nome di indice sia univoco per ogni tabella del database.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:
l2
Prodotto scalare:
dot_product
Distanza coseno:
cosine
NUM_LEAVES_VALUE
: il numero di partizioni da applicare a questo indice. Imposta un valore compreso tra 1 e 1048576. Per ulteriori informazioni su come decidere questo valore, consulta Ottimizzare un indiceScaNN
.
Indice ad albero ScaNN
a tre livelli
Per creare un indice ad albero a tre livelli utilizzando l'algoritmo ScaNN in una colonna contenente incorporamenti vettoriali archiviati, esegui la seguente query DDL:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (num_leaves=NUM_LEAVES_VALUE, max_num_levels = MAX_NUM_LEVELS);
Sostituisci quanto segue:
MAX_NUM_LEVELS
: il numero massimo di livelli dell'albero di clustering K-means. Imposta su1
(valore predefinito) per la quantizzazione basata su albero a due livelli e su2
per la quantizzazione basata su albero a tre livelli.
Dopo aver creato l'indice, puoi eseguire query di ricerca del vicino più prossimo che fanno uso dell'indice seguendo le istruzioni riportate in Eseguire una query di ricerca del vicino più prossimo con un determinato testo.
I parametri dell'indice devono essere impostati in modo da trovare il giusto equilibrio tra QPS e recupero. Per ulteriori informazioni sulla regolazione dell'indice ScaNN
, consulta Regolare un indice ScaNN
.
Per creare questo indice in una colonna di incorporamento che utilizza il tipo di dati real[]
instead of vector
, esegui il casting della colonna nel tipo di dati vector
:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)) DISTANCE_FUNCTION)
WITH (num_leaves=NUM_LEAVES_VALUE, max_num_levels = MAX_NUM_LEVELS);
Sostituisci DIMENSIONS
con la larghezza dimensionale della colonna di incorporamento. Per ulteriori informazioni su come trovare le dimensioni, consulta la funzione vector_dims
in Funzioni vettoriali.
Per visualizzare l'avanzamento dell'indicizzazione, utilizza la visualizzazione pg_stat_progress_create_index
:
SELECT * FROM pg_stat_progress_create_index;
La colonna phase
mostra lo stato corrente della creazione dell'indice e la fase building index: tree training
scompare dopo la creazione dell'indice.
Per ottimizzare l'indice in base a un equilibrio tra il numero di risultati restituiti e il numero di query al secondo target, consulta Ottimizzare un indice ScaNN
.
Analizzare la tabella indicizzata
Dopo aver creato l'indice ScaNN
, devi eseguire il comando ANALYZE
per aggiornare le statistiche relative ai tuoi dati.
ANALYZE TABLE;
Passaggi successivi
- Eseguire ricerche sulla similarità vettoriale
- Ottimizzare il rendimento delle query vettoriali
- Metriche degli indici di vettori
- Scopri come creare un assistente per lo shopping intelligente con AlloyDB, pgvector e la gestione degli endpoint del modello.