Esta publicación es la tercera parte de una serie de varias entregas que exploran la indexación vectorial compuesta en Couchbase. Si te perdiste las publicaciones anteriores, asegúrate de ponerte al día en Parte 1 y Parte 2.
La serie tratará los siguientes temas:
- Por qué son importantes los índices vectoriales compuestos, incluyendo conceptos, terminología y motivación de los desarrolladores. Se utilizará un sistema inteligente de recomendación de productos alimenticios como ejemplo práctico.
- Cómo se implementan los índices vectoriales compuestos dentro del servicio de indexación de Couchbase.
- Cómo funciona ORDER BY pushdown para consultas vectoriales compuestas.
- Comportamiento real y resultados de pruebas comparativas.
Ordenar por Pushdown: índices vectoriales compuestos
Imaginemos una función en tu aplicación de comida o comestibles:
“Recomienda cremas de chocolate para untar con un sabor similar al de Nutella, ordenadas por calidad nutricional, es decir, primero las que tienen más proteínas y luego las que tienen menos azúcar.”
Esto es más que un simple filtrado.
Requiere combinar:
- Similitud semántica (sabor/textura)
- Filtrado nutricional (azúcares y proteínas)
- Una estrategia de pedidos personalizada
La consulta SQL++ correspondiente podría tener el siguiente aspecto:
|
1 2 3 4 5 6 7 |
SELECT product_name FROM food WHERE sugars_100g < 20 AND proteins_100g > 10 ORDER BY APPROX_VECTOR_DISTANCE(text_vector, [query_embedding], 'L2'), proteins_100g DESC, sugars_100g ASC LIMIT 10; |
Esta única consulta expresa todo lo que queremos:
- Solo cremas de chocolate más saludables
- El más parecido en sabor a Nutella.
- Se prefiere un mayor contenido de proteínas.
- Menos azúcar a continuación
- Mostrar al usuario solo los 10 primeros
Ahora veamos cómo Couchbase ejecuta esto de manera extremadamente eficiente.
- Los filtros escalares se desplazan hacia abajo
- Los predicados escalares se evalúan en línea utilizando el índice vectorial compuesto.
azúcares_100 g < 20proteínas_100 g > 10
DISTANCIA_VECTORIAL_APROXIMADA(...)activa el canal de exploración ANN (vecino más cercano aproximado) de Couchbase.- El índice vectorial localiza los elementos cuyas incrustaciones son más cercanas a la incrustación de la consulta (Nutella en nuestro ejemplo).
- Consulte la parte 2 de esta serie de blogs para conocer el funcionamiento interno.
- Los predicados escalares se evalúan en línea utilizando el índice vectorial compuesto.
- LIMIT y ORDER BY Pushdown
- Aquí es donde Couchbase se vuelve excepcionalmente eficiente.
- Cuando la consulta incluye:
LÍMITE
- Couchbase puede enviar ambos
LÍMITEyORDENAR PORen el servicio de índice. - Esto evita enviar grandes conjuntos de resultados intermedios al servicio de consulta.
Así es como funciona ORDER BY Pushdown con escalares y ANN
- El indexador crea una clave de ordenación concatenada.
- Al realizar el escaneo del índice vectorial compuesto, el indexador construye una clave de ordenación compuesta para cada elemento candidato.
- La clave de clasificación compuesta concatenada consta de:
- Distancia ANN en lugar de la clave vectorial
- El escalar
ORDENAR PORcampos en el exactoORDENAR PORsecuencia:proteínas_100 g (DESC)- Negado o codificado para orden descendente
azúcares_100 g(ASC)
- Esto da como resultado una clave comparada lexicográficamente como:
(distancia, -proteínas_100 g, azúcares_100 g)
- ¿Por qué reemplazar el campo vectorial?
- Porque para ordenar, la distancia se convierte en el valor escalar real de interés y no el vector en sí mismo.
- Esto permite al indexador clasificar a los candidatos.
- El indexador solo conserva los K elementos principales
- A medida que el indexador escanea los candidatos ANN, mantiene un montón de prioridad de tamaño K (
K = LÍMITE). - Cada candidato se evalúa utilizando la clave concatenada.
- Si el montón excede el tamaño K, se elimina el elemento peor.
- Al final, solo los mejores
LÍMITEquedan artículos.
- A medida que el indexador escanea los candidatos ANN, mantiene un montón de prioridad de tamaño K (
Esto significa:
- No se producen conjuntos de resultados grandes.
- No se realiza una clasificación completa en el nodo de consulta.
- ANN + clasificación escalar + LIMIT se producen en un solo lugar.
- El indexador solo transmite los 10 elementos principales al servicio de consulta.
Cuando los resultados llegan al nodo de consulta, ya son:
- Filtrado
- Ordenado semánticamente
- Ordenado escalar
- Recortado a LÍMITE
El nodo de consulta ya casi no tiene nada que hacer.
Esta es la ruta de ejecución más rápida posible en Couchbase para la clasificación híbrida semántica + escalar.
La flexibilidad de mezclar escalares y vectores en ORDER BY
- Uno de los aspectos más potentes del índice vectorial compuesto de Couchbase es que los desarrolladores no están limitados a una única estrategia de clasificación.
- A diferencia de muchas bases de datos vectoriales que obligan a ordenar “solo por distancia vectorial”, Couchbase permite mezclar, reordenar y permutar libremente campos escalares y medidas de similitud vectorial dentro de una sola cláusula ORDER BY.
A continuación se muestran cuatro permutaciones significativas para nuestra búsqueda de alimentos similares a Nutella.
- Primero lo semántico (predomina la similitud de sabores)
- Caso de uso: quieres que el sabor “similar al de la Nutella” domine la clasificación.
|
1 2 3 4 |
ORDER BY APPROX_VECTOR_DISTANCE(...), proteins_100g DESC, sugars_100g ASC LIMIT 10; |
- Las proteínas primero (predominan las opciones más saludables)
- Caso de uso: Para aplicaciones enfocadas en el fitness, donde la nutrición es más importante que el sabor.
|
1 2 3 4 |
ORDER BY proteins_100g DESC, APPROX_VECTOR_DISTANCE(...), sugars_100g ASC LIMIT 10; |
-
-
- Caso de uso: Búsqueda de alimentos aptos para diabéticos o dietas bajas en azúcar.Azúcar primero (el usuario quiere menos azúcar por encima de todo lo demás)
-
|
1 2 3 4 |
ORDER BY sugars_100g ASC, proteins_100g DESC, APPROX_VECTOR_DISTANCE(...) LIMIT 10; |
-
- Clasificación híbrida compleja
- Caso de uso: Búsqueda centrada en la salud con respaldo semántico y criterios de desempate.
- Clasificación híbrida compleja
|
1 2 3 4 5 |
ORDER BY calories_100g ASC, APPROX_VECTOR_DISTANCE(...), proteins_100g DESC, sugars_100g ASC LIMIT 10; |
Conclusión final para desarrolladores
-
-
- Couchbase combina la similitud ANN, el filtrado escalar, el ORDER BY personalizado y el pushdown LIMIT directamente dentro del índice vectorial compuesto.
- Esto le permite crear funciones de búsqueda inteligente del mundo real, como recomendaciones de sabores de Nutella optimizadas para la nutrición, utilizando una única consulta SQL++ rápida y elegante.
- Couchbase no solo almacena vectores en el índice. Te permite consultarlos de manera eficiente y combinarlos con datos estructurados, todo a gran escala.
-