Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-06-06 GMT+08:00

Uso de pgvector

Introducción

RDS for PostgreSQL soporta el complemento pgvector, que permite la búsqueda de tipo de datos vectoriales y similitudes vectoriales. Este complemento soporta:

  • Búsqueda exacta y aproximada de vecinos más cercanos
  • Distancia L2, producto interno y distancia coseno
  • Cualquier idioma con un cliente PostgreSQL

Para obtener más información, consulte documentación oficial de pgvector.

Versiones compatibles

Este complemento está disponible para las últimas versiones secundarias de RDS for PostgreSQL 12, 13 y 14. Puede ejecutar la siguiente sentencia SQL para comprobar si su instancia de base de datos admite este complemento:

SELECT * FROM pg_available_extension_versions WHERE name = 'vector';

Si este complemento no es compatible, actualice la versión secundaria de su instancia de base de datos o actualice la versión principal mediante volcado y restauración.

Para obtener más información sobre los complementos soportados por RDS for PostgreSQL, consulte Complementos soportados.

Instalación y desinstalación de complementos

  • Instalación del complemento
    SELECT control_extension ('create', 'vector');
  • Eliminación del complemento
    SELECT control_extension ('drop', 'vector');

Para obtener más información, consulte Instalación y desinstalación de un complemento en la consola de RDS y Instalación y desinstalación de un complemento mediante comandos SQL.

Uso básico

  • Creación de una columna vectorial con 3 dimensiones
    CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
  • Inserción de vectores
    INSERT INTO items (embedding) VALUES ('[1,2,3]'), ('[4,5,6]');
  • Conseguir los vecinos más cercanos por distancia L2
    SELECT * FROM items ORDER BY embedding <-> '[3,1,2]';
  • Conseguir los vecinos más cercanos por distancia de coseno
    SELECT * FROM items ORDER BY embedding <=> '[3,1,2]';
  • Obtener los vecinos más cercanos por producto interno

    <#> returns the negative inner product since PostgreSQL only supports ASC order index scans on operators.

    SELECT * FROM items ORDER BY embedding <#> '[3,1,2]';

Uso avanzado

  • Obtener la distancia
    SELECT embedding <-> '[3,1,2]' AS distance FROM items;
    SELECT (embedding <#> '[3,1,2]') * -1 AS inner_product FROM items;
    SELECT 1 - (embedding <=> '[3,1,2]') AS cosine_similarity FROM items;
  • Promedio de vectores
    SELECT AVG(embedding) FROM items;
  • Búsqueda exacta con recuperación perfecta

    Puede agregar un índice para usar la búsqueda aproximada de vecinos más cercanos, que intercambia algunas recuperaciones por rendimiento.

    CREATE INDEX ON items USING ivfflat (embedding vector_l2_ops) WITH (lists = 1);
    INSERT INTO items (embedding) VALUES ('[1,2,4]');
    SELECT * FROM items ORDER BY embedding <-> '[3,3,3]';