Esta postagem é a terceira parte de uma série de várias partes que explora a indexação de vetores compostos no Couchbase. Se você perdeu as postagens anteriores, não deixe de se atualizar em Parte 1 e Parte 2.
A série abrangerá:
- Por que os índices vetoriais compostos são importantes, incluindo conceitos, terminologia e motivação do desenvolvedor. Um sistema inteligente de recomendação de compras será usado como exemplo.
- Como os índices de vetor composto são implementados no Serviço de Indexação do Couchbase.
- Como o pushdown ORDER BY funciona para consultas de vetor composto.
- Comportamento de desempenho no mundo real e resultados de benchmarking.
Order By Pushdown - Índices de vetores compostos
Vamos imaginar um recurso em seu aplicativo de alimentos ou de compras:
“Recomende pastas de chocolate com sabor semelhante ao da Nutella, ordenadas por qualidade nutricional, ou seja, primeiro com mais proteína e depois com menos açúcar.”
Isso é mais do que uma simples filtragem.
Isso requer uma combinação:
- Similaridade semântica (sabor/textura)
- Filtragem nutricional (açúcares e proteínas)
- Uma estratégia de pedidos personalizada
A consulta SQL++ correspondente pode ter a seguinte aparência:
|
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; |
Essa única consulta expressa tudo o que queremos:
- Somente chocolate mais saudável para barrar
- Mais próximo da Nutella em termos de semântica de sabor
- Preferencialmente com maior teor de proteína
- Menor quantidade de açúcar a seguir
- Mostrar ao usuário apenas os 10 primeiros
Agora vamos nos aprofundar em como o Couchbase executa isso de forma extremamente eficiente.
- Os filtros escalares são empurrados para baixo
- Os predicados escalares são avaliados em linha usando o Composite Vector Index.
açúcares_100g < 20proteínas_100g > 10
APPROX_VECTOR_DISTANCE(...)ativa o pipeline de varredura ANN (Approximate Nearest Neighbor) do Couchbase.- O índice vetorial localiza os itens cujas incorporações estão mais próximas da incorporações da consulta (Nutella, em nosso exemplo).
- Consulte a parte 2 desta série do blog para obter informações sobre o trabalho interno.
- Os predicados escalares são avaliados em linha usando o Composite Vector Index.
- Empurrar LIMIT e ORDER BY
- É nesse ponto que o Couchbase se torna excepcionalmente eficiente.
- Quando a consulta inclui:
LIMIT
- O Couchbase pode enviar ambos
LIMITEeORDER BYno serviço de índice. - Isso evita o envio de grandes conjuntos de resultados intermediários para o serviço de consulta.
Veja como funciona o pushdown ORDER BY com escalares e ANN
- O indexador cria uma chave de classificação concatenada
- Ao executar a varredura do Composite Vector Index, o indexador constrói uma chave de classificação composta para cada item candidato.
- A chave de classificação composta concatenada consiste em:
- Distância ANN no lugar da chave vetorial
- O escalar
ORDER BYnos campos exatosORDER BYsequência:proteínas_100g (DESC)- Negado ou codificado para ordem decrescente
açúcares_100g(ASC)
- Isso resulta em uma chave lexicograficamente comparável, como:
(distância, -proteínas_100g, açúcares_100g)
- Por que substituir o campo vetorial?
- Porque, para a ordenação, a distância se torna o valor escalar real de interesse e não o vetor em si.
- Isso permite que o indexador classifique os candidatos.
- O indexador mantém apenas os principais itens K
- À medida que o indexador examina os candidatos a ANN, ele mantém uma pilha de prioridades de tamanho K (
K = LIMITE). - Cada candidato é avaliado usando a chave concatenada.
- Se o heap exceder o tamanho K, o pior item será eliminado.
- No final, apenas o topo
LIMITEitens permanecem.
- À medida que o indexador examina os candidatos a ANN, ele mantém uma pilha de prioridades de tamanho K (
Isso significa que:
- Não são produzidos grandes conjuntos de resultados
- Nenhuma classificação completa ocorre no nó de consulta
- ANN + classificação escalar + LIMIT acontecem em um só lugar
- O indexador transmite apenas os 10 principais itens para o serviço de consulta
Quando os resultados chegam ao nó de consulta, eles já estão:
- Filtrado
- Semanticamente ordenado
- Com ordem escalar
- Cortado para LIMIT
O nó de consulta não tem quase nada a fazer.
Esse é o caminho de execução mais rápido possível no Couchbase para classificação híbrida semântica + escalar.
A flexibilidade da combinação de escalares e vetores em ORDER BY
- Um dos aspectos mais poderosos do Composite Vector Index do Couchbase é que os desenvolvedores não ficam presos a uma única estratégia de classificação.
- Ao contrário de muitos bancos de dados vetoriais que o forçam a classificar “somente por distância vetorial”, o Couchbase permite que você misture, reordene e permute livremente campos escalares e medidas de similaridade vetorial em uma única cláusula ORDER BY.
Abaixo estão quatro permutações de ordem significativas para nossa pesquisa de alimentos tipo Nutella.
- Semântica em primeiro lugar (a semelhança de sabor domina)
- Caso de uso: Você deseja que o sabor “parecido com Nutella” domine a classificação.
|
1 2 3 4 |
ORDER BY APPROX_VECTOR_DISTANCE(...), proteins_100g DESC, sugars_100g ASC LIMIT 10; |
- Proteína em primeiro lugar (predominam as opções mais saudáveis)
- Caso de uso: Para aplicações voltadas para o condicionamento físico em que a nutrição supera o sabor.
|
1 2 3 4 |
ORDER BY proteins_100g DESC, APPROX_VECTOR_DISTANCE(...), sugars_100g ASC LIMIT 10; |
-
-
- Caso de uso: Pesquisa amigável para diabéticos ou dietas com redução de açúcar.Açúcar em primeiro lugar (o usuário quer menos açúcar acima de tudo)
-
|
1 2 3 4 |
ORDER BY sugars_100g ASC, proteins_100g DESC, APPROX_VECTOR_DISTANCE(...) LIMIT 10; |
-
- Classificação híbrida complexa
- Caso de uso: Pesquisa de saúde em primeiro lugar com fallback semântico e critérios de desempate.
- Classificação híbrida complexa
|
1 2 3 4 5 |
ORDER BY calories_100g ASC, APPROX_VECTOR_DISTANCE(...), proteins_100g DESC, sugars_100g ASC LIMIT 10; |
Conclusão final para os desenvolvedores
-
-
- O Couchbase combina similaridade ANN, filtragem escalar, ORDER BY personalizado e pushdown LIMIT diretamente dentro do Composite Vector Index.
- Isso lhe dá a capacidade de criar recursos de pesquisa inteligente do mundo real, como recomendações de sabores de Nutella otimizadas para nutrição, usando uma única consulta SQL++ rápida e elegante.
- O Couchbase não armazena apenas vetores no índice. Ele permite que você os consulte com eficiência e os combine com dados estruturados, tudo em escala.
-