En esta página se describe cómo usar las inserciones almacenadas para generar índices y consultar inserciones mediante un índice IVFFlat
con AlloyDB para PostgreSQL.
Para obtener más información sobre cómo almacenar inserciones, consulta Almacenar inserciones de vectores.
Antes de empezar
Antes de empezar a crear índices, debes completar los siguientes requisitos previos.
Los vectores de inserción se añaden a una tabla de tu base de datos de AlloyDB.
La versión
vector
o posterior de la extensión0.5.0
, basada enpgvector
y ampliada por Google para AlloyDB, está instalada.CREATE EXTENSION IF NOT EXISTS vector;
Crear un índice IVFFlat
Stock pgvector
también proporciona una versión del índice IVF
llamada
IVFFlat
que ofrece un tiempo de compilación más rápido y ocupa menos memoria
que el índice hnsw
.
Para crear un índice de IVFFlat
, sigue estos pasos:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (EMBEDDING_COLUMN DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Haz los cambios siguientes:
INDEX_NAME
: el nombre del índice que quieras crear (por ejemplo,my-ivf-index
).TABLE
: la tabla a la que se va a añadir el índice.EMBEDDING_COLUMN
: una columna que almacenavector
datos.DISTANCE_FUNCTION
: la función de distancia que se va a usar con este índice. Elige una de estas opciones:Distancia L2:
vector_l2_ops
Producto interior:
vector_ip_ops
Distancia del coseno:
vector_cosine_ops
LIST_COUNT
: el número de listas que se van a usar con este índice. Para obtener más información sobre cómo decidir este valor, consulta Ajustar un índice IVFFlat.Para crear este índice en una columna de inserciones que use el tipo de datos
real[]
en lugar devector
, convierte la columna al tipo de datosvector
:
CREATE INDEX INDEX_NAME ON TABLE
USING ivfflat (CAST(EMBEDDING_COLUMN AS vector(DIMENSIONS)))'}} DISTANCE_FUNCTION)
WITH (lists = LIST_COUNT);
Sustituye 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.
Para ajustar el índice de forma que se consiga un equilibrio entre la precisión y las consultas por segundo, consulta Ajustar un índice IVFFlat
.
Ejecutar una consulta
Una vez que hayas almacenado e indexado las inserciones en tu base de datos, podrás empezar a hacer consultas con la pgvector
función de consulta.
Para encontrar los vecinos semánticos más cercanos de un vector de inserción, puedes ejecutar la siguiente consulta de ejemplo, en la que se define la misma función de distancia que se usó durante la creación del índice.
SELECT * FROM TABLE
ORDER BY EMBEDDING_COLUMN DISTANCE_FUNCTION_QUERY ['EMBEDDING']
LIMIT ROW_COUNT
Haz los cambios siguientes:
TABLE
: la tabla que contiene la inserción con la que se va a comparar el texto.INDEX_NAME
: el nombre del índice que quieras usar. Por ejemplo,my-scann-index
.EMBEDDING_COLUMN
: la columna que contiene las inserciones almacenadas.DISTANCE_FUNCTION_QUERY
: la función de distancia que se va a usar con esta consulta. Elige una de las siguientes opciones en función de la función de distancia utilizada al crear el índice:Distancia L2:
<->
Producto interior:
<#>
Distancia del coseno:
<=>
EMBEDDING
: el vector de inserción del que quieres encontrar los vecinos semánticos almacenados más cercanos.ROW_COUNT
: número de filas que se van a devolver.Especifica
1
si solo quieres la mejor coincidencia.
Para obtener más información sobre otros ejemplos de consultas, consulta Consultas.
También puedes usar la función embedding()
para traducir el texto a un vector. Aplica el vector a uno de los pgvector
operadores de vecinos más cercanos<->
, en este caso, la distancia L2, para encontrar las filas de la base de datos con las incrustaciones semánticamente más similares.
Como embedding()
devuelve una matriz real
, debes convertir explícitamente la llamada embedding()
a vector
para usar estos valores con operadores pgvector
.
Siguientes pasos
- Crear un índice de ScaNN
- Realizar búsquedas por similitud de vectores
- Ajustar el rendimiento de las consultas vectoriales
- Métricas de índice vectorial
- Consulta cómo crear un asistente de compras inteligente con AlloyDB, pgvector y la gestión de endpoints de modelos.