Crie um índice IVFFLAT

Esta página descreve como usar incorporações armazenadas para gerar índices e consultar incorporações usando um índice com o AlloyDB for PostgreSQL.IVFFlat Para mais informações sobre o armazenamento de incorporações, consulte o artigo Armazene incorporações de vetores.

Antes de começar

Antes de poder começar a criar índices, tem de concluir os seguintes pré-requisitos.

Crie um índice IVFFlat

O Stock pgvector também fornece uma versão do índice IVF denominada IVFFlat que oferece um tempo de compilação mais rápido e tem uma menor utilização de memória em comparação com o índice hnsw.

Para criar um índice IVFFlat, conclua os seguintes passos:

CREATE INDEX INDEX_NAME ON TABLE
  USING ivfflat (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (lists = LIST_COUNT);

Substitua o seguinte:

  • INDEX_NAME: o nome do índice que quer criar, por exemplo, my-ivf-index.

  • TABLE: a tabela à qual adicionar o índice.

  • EMBEDDING_COLUMN: uma coluna que armazena vector dados.

  • DISTANCE_FUNCTION: a função de distância a usar com este índice. Selecione uma das seguintes opções:

    • Distância L2: vector_l2_ops

    • Produto interior: vector_ip_ops

    • Distância do cosseno: vector_cosine_ops

  • LIST_COUNT: o número de listas a usar com este índice. Para mais informações sobre como decidir este valor, consulte o artigo Ajuste um índice IVFFlat.

    Para criar este índice numa coluna de incorporação que usa o tipo de dados real[] em vez de vector, converta a coluna no tipo de dados vector:

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 incorporação. Para mais informações sobre como encontrar as dimensões, consulte a função vector_dims em Funções vetoriais.

Para ver o progresso da indexação, use a vista 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 de modo a ter um equilíbrio entre a capacidade de memorização e o CPS alvo, consulte o artigo Ajuste um índice.IVFFlat

Execute uma consulta

Depois de armazenar e indexar as incorporações na sua base de dados, pode começar a fazer consultas através da pgvector funcionalidade de consulta.

Para encontrar os vizinhos semânticos mais próximos de um vetor de incorporação, pode executar a consulta de exemplo seguinte, em que define a mesma função de distância que usou 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 a incorporação com a qual comparar o texto.

  • INDEX_NAME: o nome do índice que quer usar, por exemplo, my-scann-index.

  • EMBEDDING_COLUMN: a coluna que contém as incorporações armazenadas.

  • DISTANCE_FUNCTION_QUERY: a função de distância a usar com esta consulta. Escolha uma das seguintes opções com base na função de distância usada ao criar o índice:

    • Distância L2: <->

    • Produto interior: <#>

    • Distância do cosseno: <=>

  • EMBEDDING: o vetor de incorporação para o qual quer encontrar os vizinhos semânticos armazenados mais próximos.

  • ROW_COUNT: o número de linhas a devolver.

    Especifique 1 se quiser apenas a melhor correspondência única.

Para mais informações sobre outros exemplos de consultas, consulte o artigo Consultar.

Também pode usar a função embedding() para traduzir o texto num vetor. Aplica o vetor a um dos pgvectoroperadores de vizinho mais próximo<->, para a distância L2, para encontrar as linhas da base de dados com as incorporações semanticamente mais semelhantes.

Uma vez que embedding() devolve uma matriz real, tem de converter explicitamente a chamada embedding() em vector para usar estes valores com operadores pgvector.

O que se segue?