En esta página, se describe cómo usar las incorporaciones almacenadas para generar índices y consultar incorporaciones con los índices ScaNN
, IVF
, IVFFlat
y HNSW
con AlloyDB para PostgreSQL.
Para obtener más información sobre el almacenamiento de incorporaciones, consulta Almacena incorporaciones de vectores.
Antes de comenzar
Antes de comenzar a crear índices, debes completar los siguientes requisitos previos.
Los vectores de incorporación se agregan a una tabla en tu base de datos de AlloyDB.
Se instaló la versión
0.5.0
o posterior de la extensiónvector
que se basa enpgvector
, que Google extendió para AlloyDB.CREATE EXTENSION IF NOT EXISTS vector;
Para generar índices
ScaNN
, instala la extensiónalloydb_scann
además de la extensiónvector
.CREATE EXTENSION IF NOT EXISTS alloydb_scann;
Crea un índice
Puedes crear uno de los siguientes tipos de índices para las tablas de tu base de datos.
Crea un índice ScaNN
AlloyDB alloydb_scann
, una extensión de PostgreSQL desarrollada por Google que implementa un índice de vecino más cercano altamente eficiente potenciado por el algoritmo ScaNN
El índice ScaNN
es un índice de cuantificación basado en árboles para la búsqueda aproximada de vecino más cercano. Proporciona un tiempo de compilación de índices más bajo y una huella de memoria más pequeña en comparación con HNSW
. Además, proporciona una QPS más rápida en comparación con HNSW
según la carga de trabajo.
Índice ScaNN
de árbol de dos niveles
Para aplicar un índice de árbol de dos niveles con el algoritmo ScaNN a una columna que contiene incorporaciones de vectores almacenadas, ejecuta la siguiente consulta DDL:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION )
WITH (num_leaves=NUM_LEAVES_VALUE );
Reemplaza lo siguiente:
INDEX_NAME
: El nombre del índice que deseas crear, por ejemplo,my-scann-index
. Los nombres de los índices se comparten en tu base de datos. Asegúrate de que cada nombre de índice sea único para cada tabla de tu base de datos.TABLE
: Es la tabla a la que se agregará el índice.EMBEDDING_COLUMN
: Es una columna que almacena datosvector
.DISTANCE_FUNCTION
: Es la función de distancia que se usará con este índice. Elige una de estas opciones:Distancia de L2:
l2
Producto punto:
dot_product
Distancia de coseno:
cosine
NUM_LEAVES_VALUE
: Es la cantidad de particiones que se aplicarán a este índice. Se establece en cualquier valor entre 1 y 1048576. Para obtener más información sobre cómo decidir este valor, consulta Cómo ajustar un índiceScaNN
.
Índice ScaNN
de árbol de tres niveles
Para crear un índice de árbol de tres niveles con el algoritmo ScaNN en una columna que contenga embeddings de vectores almacenados, ejecuta la siguiente consulta DDL:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION )
WITH (num_leaves=NUM_LEAVES_VALUE , max_num_levels = MAX_NUM_LEVELS );
Reemplaza lo siguiente:
MAX_NUM_LEVELS
: Es la cantidad máxima de niveles del árbol de agrupamiento de K-means. Configúralo en1
(predeterminado) para la cuantificación basada en árboles de dos niveles y en2
para la cuantificación basada en árboles de tres niveles.
Después de crear el índice, puedes ejecutar consultas de búsqueda de vecino más cercano que usen el índice. Para ello, sigue las instrucciones que se indican en Realiza una consulta de vecino más cercano con texto determinado.
Los parámetros del índice deben establecerse para lograr un equilibrio adecuado entre las QPS y la recuperación. Para obtener más información sobre cómo ajustar el índice ScaNN
, consulta Cómo ajustar un índice ScaNN
.
Para crear este índice en una columna de embedding que use el tipo de datos real[]
en lugar de vector
, convierte la columna en el tipo de datos vector
:
CREATE INDEX INDEX_NAME ON TABLE
USING scann (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS )) DISTANCE_FUNCTION )
WITH (num_leaves=NUM_LEAVES_VALUE , max_num_levels = MAX_NUM_LEVELS );
Reemplaza DIMENSIONS
por el ancho dimensional de la columna de inserción. Para obtener más información sobre cómo encontrar las dimensiones, consulta la función vector_dims
en Funciones de vector.
Para ver el progreso de la indexación, usa la vista pg_stat_progress_create_index
:
SELECT * FROM pg_stat_progress_create_index;
La columna phase
muestra el estado actual de la creación del índice, y la fase building index: tree training
desaparece después de que se crea el índice.
Para ajustar tu índice para obtener una recuperación objetivo y un equilibrio de QPS, consulta Cómo ajustar un índice ScaNN
.
¿Qué sigue?
- Ejecuta búsquedas de similitud de vectores
- Ajusta el rendimiento de las consultas vectoriales
- Métricas del índice vectorial
- Obtén información para crear un asistente de compras inteligente con AlloyDB, pgvector y la administración de extremos de modelos.