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]';