Creazione dell'indice ScaNN
Per ulteriori informazioni, consulta la documentazione di riferimento dell'indice ScaNN.
Indice ad albero a due livelli
Per applicare i consigli che ti aiutano a trovare i valori ottimali di num_leaves
e num_leaves_to_search
per il tuo set di dati,
segui questi passaggi consigliati:
- Per creare l'indice
ScaNN
ottimizzato per i seguenti casi, imposta il parametronum_leaves
sul seguente valore, dove rows è il numero di righe nella tabella indicizzata:- balanced index build time and quality impostato su
num_leaves
asqrt(rows)
. - quality imposta num_leaves su righe/100.
- balanced index build time and quality impostato su
- Esegui le query di test, aumentando il valore di
scann.num_of_leaves_to_search
, finché non raggiungi l'intervallo di richiamo target, ad esempio il 95%. Per ulteriori informazioni sull'analisi delle query, vedi Analizzare le query. - Prendi nota del rapporto tra
scann.num_leaves_to_search
enum_leaves
che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.
Se lavori con vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a modificare il valore discann.pre_reordering_num_neighbors
. Il valore predefinito è impostato sul valore500 * K
, doveK
è il limite impostato nella query. - Se il tuo QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
- Ricrea l'indice, aumentando il valore di
num_leaves
escann.num_leaves_to_search
in base alle seguenti indicazioni:- Imposta
num_leaves
su un fattore maggiore della radice quadrata del numero di righe. Ad esempio, se l'indice hanum_leaves
impostato sulla radice quadrata del conteggio delle righe, prova a impostarlo sul doppio della radice quadrata. Se il valore è già il doppio, prova a impostarlo sul triplo della radice quadrata. - Aumenta
scann.num_leaves_to_search
in base alle necessità per mantenere il rapporto connum_leaves
, che hai annotato nel passaggio 3. - Imposta
num_leaves
su un valore minore o uguale al numero di righe diviso per 100.
- Imposta
- Esegui di nuovo le query di test.
Mentre esegui le query di test, prova a ridurre
scann.num_leaves_to_search
, trovando un valore che aumenti le QPS mantenendo un richiamo elevato. Prova valori diversi discann.num_leaves_to_search
senza ricompilare l'indice.
- Ricrea l'indice, aumentando il valore di
- Ripeti il passaggio 4 finché sia il QPS sia l'intervallo di richiamo non avranno raggiunto valori accettabili.
Indice ad albero a tre livelli
Oltre ai consigli per l'indice ScaNN
ad albero a due livelli, utilizza le seguenti indicazioni.
Per applicare i consigli per trovare il valore ottimale dei parametri di indice num_leaves
e max_num_levels
:
Crea l'indice
ScaNN
con le seguenti combinazioni dinum_leaves
emax_num_levels
in base ai tuoi obiettivi di rendimento:- bilancia il tempo di creazione dell'indice e la qualità: imposta
max_num_levels
come2
enum_leaves
comepower(rows, ⅔)
. - Ottimizza per la qualità: imposta
max_num_levels
come2
enum_leaves
comerows/100
.
- bilancia il tempo di creazione dell'indice e la qualità: imposta
Esegui le query di test. Per maggiori informazioni sull'analisi delle query, vedi Analizzare le query.
Prendi nota del rapporto tra
scann.num_leaves_to_search
enum_leaves
che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il richiamo target.
Se lavori con vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a modificare il valore di scann.pre_reordering_num_neighbors
. Il valore predefinito è impostato sul valore 500 * K
, dove K
è il limite impostato nella query.
Se il tuo QPS è troppo basso dopo che le query raggiungono un richiamo target, segui questi passaggi:
- Ricrea l'indice, aumentando il valore di
num_leaves
escann.num_leaves_to_search
in base alle seguenti indicazioni: - Imposta
num_leaves
su un fattore maggiore dipower(rows, ⅔)
. Ad esempio, se l'indice hanum_leaves
impostato supower(rows, ⅔)
, prova a impostarlo sul doppio dipower(rows, ⅔)
. Se il valore è già doppio, prova a impostarlo sul triplo dipower(rows, ⅔)
. - Aumenta
scann.num_leaves_to_search
in base alle necessità per mantenere il rapporto connum_leaves
, che hai annotato nel passaggio 3. - Imposta un valore di
num_leaves
minore o uguale arows/100
. - Esegui di nuovo le query di test. Mentre esegui le query di test, prova a ridurre
scann.num_leaves_to_search
, trovando un valore che aumenti le QPS mantenendo un richiamo elevato. Prova valori diversi discann.num_leaves_to_search
senza ricompilare l'indice.
- Ricrea l'indice, aumentando il valore di
Ripeti il passaggio 4 finché sia il QPS sia l'intervallo di richiamo non avranno raggiunto valori accettabili.
Manutenzione indici
Se la tua tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di reindicizzare periodicamente l'indice ScaNN
esistente per migliorare l'accuratezza del recupero.
Puoi monitorare le metriche dell'indice per visualizzare le modifiche nelle distribuzioni dei vettori o nelle mutazioni dei vettori dalla creazione dell'indice e poi eseguire nuovamente l'indicizzazione di conseguenza. Per saperne di più sulle metriche, consulta Metriche dell'indice vettoriale.