Una búsqueda de vectores filtrada consta de un vector de consulta y un filtro para un campo específico. AlloyDB Omni usa las potentes capacidades de consulta de PostgreSQL, lo que te permite realizar búsquedas de vectores y consultar datos estructurados y no estructurados desde una sola interfaz de SQL.
Opciones de filtros
El optimizador de consultas de AlloyDB Omni desempeña un papel fundamental en la determinación de la estrategia de filtrado más eficiente para tu búsqueda de vectores.
Para estimar el costo de los diferentes planes de ejecución, el optimizador de consultas analiza tu consulta y considera factores como la selectividad del filtro, la distribución de datos y la disponibilidad del índice.
Según la estimación de costos, el optimizador elige una estrategia de filtrado óptima entre las siguientes:
Prefiltrar
El prefiltrado es una estrategia de optimización de consultas en la que AlloyDB Omni usa tus filtros para encontrar un grupo más pequeño de elementos que coincidan con tus criterios en lugar de buscar en todo el conjunto de datos. Luego, AlloyDB Omni ejecuta la búsqueda de vectores en ese grupo más pequeño.
Por ejemplo, si buscas camisas azules similares, AlloyDB Omni primero encuentra todas las camisas azules y, luego, busca elementos similares dentro de ese grupo.
Esta estrategia mejora el rendimiento porque ejecuta la búsqueda de similitud de vectores con uso intensivo de procesamiento en un conjunto de datos reducido.
Posfiltrar
El posfiltrado es una estrategia que usa AlloyDB Omni cuando tus filtros no reducen los resultados de manera considerable. En lugar de filtrar primero, AlloyDB Omni comienza por encontrar una lista amplia de elementos similares según tu búsqueda de vectores. Luego, verifica los resultados con las condiciones de tu filtro para generar la lista final.
Por ejemplo, si buscas películas similares y tienes un filtro muy amplio como genre = drama, AlloyDB Omni primero encuentra un conjunto grande de películas que son similares a tu búsqueda y, luego, las filtra por género, ya que la mayoría de las películas pueden ser dramas.
Esta estrategia es eficiente cuando esperas que muchos resultados coincidan con tu filtro.
Filtrado intercalado
El filtrado intercalado es una estrategia de optimización de consultas en la que AlloyDB Omni usa vectores y otros índices secundarios para realizar búsquedas de vectores y evaluar filtros en conjunto. AlloyDB Omni busca en el índice de vectores para encontrar vectores similares y también verifica si cada vector coincide con las condiciones de tu filtro de metadatos, aprovechando índices como B-trees, GIN o GiST para una evaluación rápida de estas condiciones.
Por ejemplo, si buscas zapatos similares y filtras por color = black, el filtrado intercalado significa que AlloyDB Omni solo verifica la similitud de los zapatos que ya son negros. Esto es más eficiente que verificar la similitud de todos los zapatos y, luego, filtrar por color, o filtrar todos los zapatos por color y, luego, verificar la similitud.
El filtrado intercalado es excelente cuando los filtros reducen los resultados de manera moderada.
Comprende los planes de consultas
Un plan de consultas proporciona una vista integral del proceso de ejecución de la consulta y muestra qué estrategia de filtrado elige AlloyDB Omni para la operación de análisis de vectores en el campo Execution Strategy.
Un plan de consultas para el filtrado intercalado
Para el filtrado intercalado, AlloyDB Omni usa un nodo de plan de análisis personalizado, también conocido como análisis de vectores, que se basa en un nodo de plan de análisis de índice de mapa de bits para proporcionar el mapa de bits para las cláusulas de filtro.
El análisis de vectores calcula las distancias solo para las filas que cumplen con los criterios de filtro.
En la siguiente consulta, se muestra el filtrado intercalado para una búsqueda de shoes filtrada por color = black.
EXPLAIN
SELECT *
FROM products
WHERE color = 'black'
ORDER BY embedding <=> embedding('text-embedding-005', 'shoes')::vector
LIMIT 10;
En el siguiente plan de consultas de ejemplo, se ilustra una búsqueda de vectores optimizada con filtrado intercalado:
Limit (actual rows=10)
-> Custom Scan (vector scan) on products
Execution Strategy: Bitmap assisted vector Scan on products_embedding_index
Order By: (embedding <=> '[...]')::vector)
Limit: 10
-> Bitmap Index Scan on products (color_index)
Index Cond: (color = 'black')
En el plan de consultas de ejemplo, Limit (actual rows=10) muestra que la consulta usó la cláusula SQL LIMIT 10; para restringir el resultado. actual rows=10 significa que este nodo mostró 10 filas durante la ejecución de la consulta.
El nodo -> Custom Scan (vector scan) on products representa una operación de búsqueda de vectores. Es un análisis personalizado porque es un análisis especial para datos vectoriales y opera en la tabla products.
El plan de consultas de ejemplo para el filtrado intercalado muestra Bitmap assisted vector Scan on products_embedding_index en el campo Execution Strategy, lo que indica que el análisis de vectores usa el mapa de bits para crear una lista breve de filas en las que se debe realizar la búsqueda de similitud. El análisis de índice de mapa de bits se usa para filtrar los datos según la condición color = 'black'.
El atributo Order By: (embedding <=> '[...]')::vector indica que los resultados se ordenan según la similitud de vectores, que se calcula con la expresión (embedding <=> '[...]')::vector, en la que embedding hace referencia a la columna de vectores, <=> representa el operador de vecino más cercano, [...] es el vector de consulta y ::vector realiza la conversión de tipo al tipo de datos vectoriales.
El nodo -> Bitmap Index Scan on products (color_index) representa un análisis de índice de mapa de bits en el colors_index. Un análisis de índice de mapa de bits selecciona las filas que coinciden con la condición de filtro mediante un mapa de bits y usa el color_index para el filtrado.
El atributo Index Cond: (color = 'black') especifica la condición de filtro que usa el análisis de índice color = 'black' de la cláusula WHERE de la consulta.