IBM Cloud Docs
Explorando a pesquisa baseada em vetores em Databases for PostgreSQL usando o pgvector

Explorando a pesquisa baseada em vetores em Databases for PostgreSQL usando o pgvector

pgVector é uma extensão do site IBM Cloud® Databases for PostgreSQL que adiciona suporte à pesquisa de similaridade vetorial. Ele permite armazenar e consultar vetores (matrizes de números) e calcular a similaridade entre eles. Isso é particularmente útil em aplicativos de aprendizado de máquina em que você pode querer encontrar vetores (por exemplo, recursos de imagem ou incorporação de palavras) que sejam semelhantes a um determinado vetor.

pgVector é compatível com o site PostgreSQL versão 15 e superior.

Definição e gerenciamento de colunas de vetores

Para usar o site pgVector para armazenar e realizar pesquisas de similaridade em dados vetoriais no site Databases for PostgreSQL, execute as seguintes etapas:

  1. Use a consulta abaixo para ativar a extensão:

    CREATE EXTENSION pg_vector;
    
  2. Você pode criar uma tabela com uma coluna de vetor especificando a dimensão dos vetores a serem armazenados, como na consulta a seguir:

    eg:
    exampledb=# CREATE TABLE sample_image (id SERIAL PRIMARY KEY, embedded_vector vector(5));
    CREATE TABLE
    
  3. Inserir entradas de dados e obtê-las usando um comando SELECT.

    eg:
    exampledb=# INSERT INTO sample_image (embedded_vector) values ('[1,2,3,4,5]');
    INSERT 0 1
    exampledb=# INSERT INTO sample_image (embedded_vector) values (array[0.1, 0.2, 0.3, 0.4, 0.5]);
    INSERT 0 1
    
    
    exampledb=# select  * from sample_image;
    id |    embedded_vector
    ----+-----------------------
    1 | [1,2,3,4,5]
    2 | [0.1,0.2,0.3,0.4,0.5]
    (2 rows)
    
    
  4. Para melhorar o desempenho da pesquisa, crie um índice na coluna do vetor.

    Hierarchical Navigable Small World (HNSW) e Inverse Vertex File Flat (IVFFlat) são métodos de indexação usados no contexto da pesquisa de similaridade de vetores, comumente empregados em aplicativos que envolvem aprendizado de máquina, mineração de dados ou recuperação de informações.

    exampledb=# CREATE INDEX sample_image_embedded_vector_idx on sample_image using hnsw(embedded_vector vector_l2_ops);
    CREATE INDEX
    
  5. Há vários operadores disponíveis no pgvector que podem ajudá-lo a realizar pesquisas de vizinhos mais próximos com eficiência. Para obter mais informações sobre os operadores compatíveis e exemplos de uso, consulte a documentação do pgvector {: external}.

    exampledb=# select * from sample_image ORDER BY embedded_vector <=>'[0.1,0.2,0.3,0.4,0.5]'::vector ;
    id |    embedded_vector
    ----+-----------------------
    2 | [0.1,0.2,0.3,0.4,0.5]
    1 | [1,2,3,4,5]
    (2 rows)