Os índices Inverted File Flat (IVFFlat) no AlloyDB para PostgreSQL permitem acelerar as pesquisas de similaridade vetorial em embeddings armazenados, minimizando o tempo de build do índice e o uso da memória. É possível criar índices IVFFlat usando a extensão vector e consultar os embeddings indexados. Para mais informações sobre como armazenar
embeddings, consulte Armazenar embeddings de vetor.
Antes de começar
Antes de começar a criar índices, conclua os pré-requisitos a seguir.
Os vetores de embedding são adicionados a uma tabela no seu banco de dados do AlloyDB.
A versão
0.5.0ou mais recente da extensãovectorbaseada empgvector, estendida pelo Google para AlloyDB, está instalada.CREATE EXTENSION IF NOT EXISTS vector;
Criar um índice IVFFlat
O pgvector padrão também oferece uma versão do índice IVF chamada
IVFFlat
que oferece um tempo de criação mais rápido e tem um consumo de memória menor em
comparação com o índice hnsw.
Para criar um índice IVFFlat, siga estas etapas:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Substitua:
INDEX_NAME: o nome do índice que você quer criar, por exemplo,my-ivf-index.TABLE: a tabela em que o índice será adicionado.EMBEDDING_COLUMN: uma coluna que armazena dados devector.DISTANCE_FUNCTION: a função de distância a ser usada com esse índice. Escolha uma destas opções:Distância de L2:
vector_l2_opsProduto interno:
vector_ip_opsDistância do cosseno:
vector_cosine_ops
LIST_COUNT: o número de listas a serem usadas com esse índice. Para mais informações sobre como decidir esse valor, consulte Ajustar um índice IVFFlat.Para criar esse índice em uma coluna incorporada que usa o tipo de dados
real[]em vez devector, converta a coluna no tipo de dadosvector:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Substitua DIMENSIONS pela largura dimensional da coluna de embedding. Para mais informações sobre como encontrar as dimensões,
consulte a função vector_dims em Funções
vetoriais.
Para conferir o progresso da indexação, use a visualização pg_stat_progress_create_index:
SELECT * FROM pg_stat_progress_create_index;
A coluna phase mostra o estado atual da criação do índice.
Para ajustar o índice para um recall de destino e um equilíbrio de QPS, consulte Ajustar um
IVFFlat índice.
Executar uma consulta
Depois de armazenar e indexar os embeddings no banco de dados, você pode começar a
consultar usando a pgvector funcionalidade de consulta.
Para encontrar os vizinhos semânticos mais próximos de um vetor de embedding, execute a consulta de exemplo a seguir, em que você define a mesma função de distância usada durante a criação do índice.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Substitua o seguinte:
TABLE: a tabela que contém o embedding com o qual você vai comparar o texto.INDEX_NAME: o nome do índice que você quer usar, por exemplo,my-scann-index.EMBEDDING_COLUMN: a coluna que contém os embeddings armazenados.DISTANCE_FUNCTION_QUERY: a função de distância a ser usada com essa consulta. Escolha uma das seguintes opções com base na função de distância usada ao criar o índice:Distância de L2:
<->Produto interno:
<#>Distância do cosseno:
<=>
EMBEDDING: o vetor de embedding para encontrar os vizinhos semânticos armazenados mais próximos.ROW_COUNT: o número de linhas que serão retornadas.Especifique
1se você quiser apenas a melhor correspondência.
Para mais exemplos de consultas, consulte Consultas.
Também é possível usar a embedding() função para traduzir o
texto em um vetor. Você aplica o vetor a um dos
pgvector operadores de vizinho mais próximo, <-> para a distância de L2, para encontrar as linhas do banco de dados com os
embeddings mais semânticamente semelhantes.
Como embedding() retorna uma matriz real, é necessário transmitir explicitamente a chamada
embedding() para vector para usar esses valores com operadores pgvector.
A seguir
- Criar um índice ScaNN
- Executar pesquisas de similaridade vetorial
- Ajustar o desempenho da consulta vetorial
- Métricas de índice vetorial
- Aprenda a criar um assistente de compras inteligente com o AlloyDB, o pgvector e o gerenciamento de endpoints de modelo.