Esta página descreve as práticas recomendadas de indexação de vetores que otimizam seus índices de vetores e melhoram os resultados de consultas de vizinho mais próximo aproximado (ANN).
Ajustar as opções de pesquisa vetorial
Os valores mais adequados para as opções de índice vetorial dependem do seu caso de uso, do conjunto de dados de vetores e dos vetores de consulta. É possível definir e ajustar esses valores
criando um novo índice de vetor e definindo index_option_list
na instrução CREATE VECTOR INDEX
. Talvez seja necessário fazer um ajuste iterativo para encontrar os melhores valores para sua carga de trabalho específica.
Confira algumas diretrizes úteis para escolher valores adequados:
tree_depth
(nível da árvore): se a tabela que você está indexando tiver menos de 10 milhões de linhas, use umtree_depth
de2
. Caso contrário, umtree_depth
de3
aceita tabelas de até 10 bilhões de linhas.num_leaves
: use a raiz quadrada do número de linhas no conjunto de dados. Um valor maior pode aumentar o tempo de criação do índice de vetor. Evite definirnum_leaves
maior quetable_row_count
dividido por 1.000, porque isso resulta em folhas muito pequenas e desempenho ruim.num_leaves_to_search
: essa opção especifica quantos nós folha do índice são pesquisados. Aumentarnum_leaves_to_search
melhora o recall, mas também aumenta a latência e o custo. Recomendamos usar um número que seja 1% do número total de folhas definidas na instruçãoCREATE VECTOR INDEX
como o valor denum_leaves_to_search
. Se você estiver usando uma cláusula de filtro, aumente esse valor para ampliar a pesquisa.
Se um recall aceitável for alcançado, mas o custo da consulta for muito alto, resultando em um QPS máximo baixo, tente aumentar num_leaves
seguindo estas etapas:
- Defina
num_leaves
como um múltiplo k do valor original (por exemplo,2 * sqrt(table_row_count)
). - Defina
num_leaves_to_search
como o mesmo múltiplo k do valor original. - Tente reduzir
num_leaves_to_search
para melhorar o custo e o QPS, mantendo o recall.
Melhorar a recuperação
Para melhorar o recall, ajuste o valor de num_leaves_to_search
ou recrie o índice de vetor.
Aumentar o valor de num_leaves_to_search
Se o valor de num_leaves_to_search
for muito pequeno, talvez seja mais difícil encontrar os vizinhos mais próximos para alguns vetores de consulta. Criar um novo índice vetorial com um valor num_leaves_to_search
maior pode ajudar a melhorar o recall pesquisando mais folhas. As consultas recentes podem conter mais desses vetores desafiadores.
Recriar o índice de vetor
A estrutura de árvore do índice de vetor é otimizada para o conjunto de dados no momento da criação e permanece estática depois disso. Portanto, se vetores significativamente diferentes forem adicionados após a criação do índice de vetor inicial, a estrutura de árvore poderá ser inadequada, resultando em uma recuperação mais baixa.
Para recriar o índice de vetores sem inatividade:
- Crie um novo índice vetorial na mesma coluna de embedding do índice vetorial atual, atualizando os parâmetros (por exemplo,
OPTIONS
) conforme necessário. - Depois que a criação do índice for concluída, use a dica
FORCE_INDEX
para apontar para o novo índice e atualizar a consulta de pesquisa vetorial. Isso garante que a consulta use o novo índice de vetor. Talvez também seja necessário ajustarnum_leaves_to_search
na nova consulta. - Remova o índice vetorial desatualizado.
A seguir
Saiba mais sobre os índices vetoriais do Spanner.
Saiba mais sobre os vizinhos mais próximos aproximados do Spanner.
Saiba mais sobre as funções GoogleSQL
APPROXIMATE_COSINE_DISTANCE()
,APPROXIMATE_EUCLIDEAN_DISTANCE()
,APPROXIMATE_DOT_PRODUCT()
.Saiba mais sobre as instruções
VECTOR INDEX
do GoogleSQL.