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
ScaNNottimizzato per i seguenti casi, imposta il parametronum_leavessul seguente valore, dove rows è il numero di righe nella tabella indicizzata:- balanced index build time and quality impostato su
num_leavesasqrt(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_searchenum_leavesche 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_leavesescann.num_leaves_to_searchin base alle seguenti indicazioni:- Imposta
num_leavessu un fattore maggiore della radice quadrata del numero di righe. Ad esempio, se l'indice hanum_leavesimpostato 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_searchin base alle necessità per mantenere il rapporto connum_leaves, che hai annotato nel passaggio 3. - Imposta
num_leavessu 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_searchsenza 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
ScaNNcon le seguenti combinazioni dinum_leavesemax_num_levelsin base ai tuoi obiettivi di rendimento:- bilancia il tempo di creazione dell'indice e la qualità: imposta
max_num_levelscome2enum_leavescomepower(rows, ⅔). - Ottimizza per la qualità: imposta
max_num_levelscome2enum_leavescomerows/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_searchenum_leavesche 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_leavesescann.num_leaves_to_searchin base alle seguenti indicazioni: - Imposta
num_leavessu un fattore maggiore dipower(rows, ⅔). Ad esempio, se l'indice hanum_leavesimpostato 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_searchin base alle necessità per mantenere il rapporto connum_leaves, che hai annotato nel passaggio 3. - Imposta un valore di
num_leavesminore 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_searchsenza 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.