Nenhum método de busca isolado atende a todos os cenários. O TairVector permite combinar filtragem condicional, busca de texto completo e busca vetorial em uma única consulta e, em seguida, ponderar os resultados com um único parâmetro. Este guia apresenta um exemplo prático com um conjunto de dados de imagens de product para mostrar o comportamento de cada combinação e como ajustar o parâmetro hybrid_ratio.
Por que combinar métodos de busca
Os modelos de linguagem de grande porte (LLMs) codificam dados não estruturados — texto, imagens, áudio e vídeo — como vetores, o que possibilita a busca por similaridade semântica. Cada método de busca possui pontos fortes e limitações específicas:
|
Método |
Ponto forte |
Limitação |
|
Busca vetorial |
Processa vários tipos de dados e encontra resultados semanticamente similares |
Depende muito da qualidade do LLM e pode não encontrar correspondências exatas para termos específicos do domínio |
|
Busca de texto completo |
Encontra palavras-chave e frases exatas |
Não captura sinônimos, paráfrases e termos semanticamente relacionados, além de ser sensível a erros de digitação |
|
Filtragem condicional |
Aplica restrições booleanas rigorosas em campos estruturados |
Limita-se a dados estruturados e não classifica por relevância |
O TairVector combina esses três métodos em uma única instrução. Os resultados de cada método recebem uma pontuação, são ponderados e mesclados em um conjunto final de candidatos. Use o parâmetro hybrid_ratio para controlar o peso de cada método.
Como o hybrid_ratio funciona
O hybrid_ratio define o peso da busca vetorial. O peso da busca de texto completo é 1 - hybrid_ratio.
|
**Valor do |
Efeito |
|
|
Busca vetorial quase pura |
|
|
Peso igual entre busca vetorial e de texto completo |
|
|
Busca de texto completo quase pura |
Quando a busca vetorial e a busca de texto completo recuperam o mesmo item, esse item recebe uma classificação mais alta nos resultados mesclados.
Conjunto de dados de exemplo
Os exemplos deste guia usam o conjunto de dados de open source fashion-product-images-small, que contém 44.000 registros de product.
Ao usar conjuntos de dados de open source, cumpra as licenças associadas e as leis aplicáveis.
Esquema de dados
|
Campo |
Tipo |
|
|
int64 |
|
|
string |
|
|
string |
|
|
string |
|
|
string |
|
|
string |
|
|
string |
|
|
float64 |
|
|
string |
|
|
string |
|
|
dict |
Mapeie os campos do conjunto de dados para o TairVector
O TairVector usa uma estrutura de armazenamento Tair vector index Key-Key-(Key-Value). Antes de importar os dados, crie um índice vetorial (por exemplo, hybrid_index) e mapeie cada campo do conjunto de dados para a função apropriada do TairVector:
|
Campo do conjunto de dados |
Função no TairVector |
Finalidade |
|
|
Chave primária |
Consultas por ponto e varredura de uma pequena quantidade de dados |
|
|
Vetor |
Embeddings de imagens codificados por LLM para busca vetorial |
|
|
Descrição de texto completo |
Texto usado para busca de texto completo |
|
Todos os outros campos |
Pares chave-valor |
Atributos para filtragem condicional (sem limite de quantidade) |
A figura a seguir mostra a estrutura de dados resultante no TairVector.

Pré-requisitos
Antes de começar, gerencie sua instância do Tair e verifique se você:
Carregou o conjunto de dados fashion-product-images-small
Configurou uma instância do Tair
Importou o conjunto de dados para o Tair usando o mapeamento de campos acima
Para obter o código completo de configuração e importação, baixe o arquivo hybrid_search_demo.ipynb. Para preparar o ambiente, instale as dependências necessárias executando pip install jupyter antes de abrir o arquivo.
Execute consultas de busca híbrida
Todos os exemplos usam o tvs_knnsearch para consultar o hybrid_index com topk=20. O texto da consulta é "Green Kidswear". O valor do hybrid_ratio é a única variável entre os cenários. Para testar, execute os códigos abaixo.
Busca vetorial
Para usar a busca vetorial quase pura, defina o hybrid_ratio como 0.9999.
topk = 20
text = "Green Kidswear"
vector = model.encode([text])[0]
filter_str = None
kwargs = {"TEXT": text, "hybrid_ratio": 0.9999}
result = client.tvs_knnsearch(index_name, topk, vector, False, filter_str, **kwargs)
top_img = [images[id_pos[int(item[0])]] for item in result]
display_result(top_img)
Resultado:

Busca de texto completo
Para usar a busca de texto completo quase pura, defina o hybrid_ratio como 0.0001.
topk = 20
text = "Green Kidswear"
vector = model.encode([text])[0]
filter_str = None
kwargs = {"TEXT": text, "hybrid_ratio": 0.0001}
result = client.tvs_knnsearch(index_name, topk, vector, False, filter_str, **kwargs)
top_img = [images[id_pos[int(item[0])]] for item in result]
display_result(top_img)
Resultado:

Busca híbrida (vetorial + texto completo)
Para equilibrar igualmente a busca vetorial e a de texto completo, defina o hybrid_ratio como 0.5.
topk = 20
text = "Green Kidswear"
vector = model.encode([text])[0]
filter_str = None
kwargs = {"TEXT": text, "hybrid_ratio": 0.5}
result = client.tvs_knnsearch(index_name, topk, vector, False, filter_str, **kwargs)
top_img = [images[id_pos[int(item[0])]] for item in result]
display_result(top_img)
Resultado:

Busca híbrida com filtragem condicional
Adicione um filter_str para restringir os resultados a um atributo específico. Este exemplo filtra por subCategory == "Topwear" e mantém o hybrid_ratio em 0.5.
topk = 20
text = "Green Kidswear"
vector = model.encode([text])[0]
filter_str = "subCategory == \"Topwear\""
kwargs = {"TEXT": text, "hybrid_ratio": 0.5}
result = client.tvs_knnsearch(index_name, topk, vector, False, filter_str, **kwargs)
print(result)
top_img = [images[id_pos[int(item[0])]] for item in result]
display_result(top_img)
Resultado:

Escolha uma estratégia de busca
Use a tabela a seguir para escolher a combinação ideal para o seu cenário.
|
Estratégia |
** |
Ideal para |
|
Busca vetorial |
|
Similaridade semântica e consultas multimodais (imagem, áudio, vídeo) |
|
Busca de texto completo |
|
Correspondências exatas de palavras-chave e terminologia específica do domínio |
|
Híbrida (vetorial + texto completo) |
|
Busca de uso geral e equilíbrio entre recall e precisão |
|
Híbrida + filtro condicional |
Qualquer valor, com |
Busca delimitada por um atributo específico (categoria, cor, estação) |
Principais observações sobre os resultados do exemplo:
Tanto a busca vetorial quanto a de texto completo retornam resultados relevantes para
"Green Kidswear". A busca de texto completo apresenta uma precisão ligeiramente maior no conjunto de candidatos mais bem classificados.No modo híbrido, os itens recuperados por ambos os métodos recebem uma classificação mais alta do que os itens recuperados por apenas um. Esse efeito de reclassificação melhora a qualidade dos resultados sem a necessidade de ajuste manual de pontuação.
A filtragem condicional reduz o conjunto de candidatos para melhorar a taxa de acerto da busca vetorial quando o atributo alvo é conhecido.
Próximos passos
Para obter a referência completa da API
tvs_knnsearche os parâmetros suportados, consulte TairVector.