Da busca vetorial às poderosas REST APIs, o Elasticsearch oferece aos desenvolvedores o kit de ferramentas de busca mais abrangente. Mergulhe em notebooks de exemplo no GitHub para experimentar algo novo. Você também pode iniciar seu teste gratuito ou executar o Elasticsearch localmente hoje mesmo.
Nas partes anteriores desta série, foi demonstrado como usar o cliente Elasticsearch Go para pesquisa tradicional por palavras-chave e pesquisa vetorial. Esta terceira parte aborda a busca híbrida. Vamos compartilhar exemplos de como você pode combinar a pesquisa vetorial e a pesquisa por palavra-chave usando o Elasticsearch e o cliente Elasticsearch Go.
Pré-requisitos
Assim como na primeira parte desta série, os seguintes pré-requisitos são necessários para este exemplo:
- Instalação do Go versão 1.21 ou posterior
- Crie seu próprio repositório Go usando a estrutura recomendada e o gerenciamento de pacotes abordados na documentação do Go.
- Criando seu próprio cluster Elasticsearch, preenchido com um conjunto de páginas baseadas em roedores, incluindo para o nosso amigável Gopher, da Wikipédia:

Conectando-se ao Elasticsearch
Lembrando que, em nossos exemplos, utilizaremos a API tipada oferecida pelo cliente Go. Para estabelecer uma conexão segura para qualquer consulta, é necessário configurar o cliente usando um dos seguintes métodos:
- ID da nuvem e chave de API, caso esteja utilizando o Elastic Cloud.
- URL do cluster, nome de usuário, senha e certificado
A conexão com nosso cluster localizado no Elastic Cloud seria feita da seguinte forma:
A conexão client pode então ser usada para pesquisa, como demonstrado nas seções subsequentes.
Impulsionamento manual para pesquisa híbrida
Ao combinar qualquer conjunto de algoritmos de busca, a abordagem tradicional tem sido configurar manualmente constantes para otimizar cada tipo de consulta. Especificamente, um fator é definido para cada consulta, e o conjunto de resultados combinados é comparado ao conjunto esperado para determinar a recuperação da consulta. Em seguida, repetimos o processo para vários conjuntos de fatores e escolhemos aquele que mais se aproxima do estado desejado.
Por exemplo, combinar uma consulta de pesquisa de texto simples, ampliada por um fator de 0.8 , com uma consulta KNN com um fator menor de 0.2 pode ser feito especificando o campo Boost em ambos os tipos de consulta, como mostrado no exemplo abaixo:
O fator especificado na opção Boost para cada consulta é adicionado à pontuação do documento. Ao aumentar a pontuação da nossa consulta de correspondência por um fator maior do que a consulta knn, os resultados da consulta por palavra-chave recebem um peso maior.
O desafio da otimização manual, especialmente se você não for um especialista em buscas, é que ela exige ajustes para descobrir os fatores que levarão ao conjunto de resultados desejado. Trata-se simplesmente de experimentar valores aleatórios para ver o que o aproxima do resultado desejado.
Fusão de classificação recíproca em pesquisa híbrida e cliente Go
O Reciprocal Rank Fusion, ou RRF, foi lançado em versão de pré-visualização técnica para busca híbrida no Elasticsearch 8.9. Tem como objetivo reduzir a curva de aprendizado associada ao ajuste fino e diminuir o tempo gasto experimentando diferentes fatores para otimizar o conjunto de resultados.
Com o RRF, a pontuação do documento é recalculada combinando as pontuações pelo algoritmo abaixo:
A vantagem de usar o RRF é que podemos aproveitar os valores padrão adequados do Elasticsearch. A constante de classificação k assume o valor padrão 60. Para proporcionar um equilíbrio entre a relevância dos documentos retornados e o desempenho da consulta ao pesquisar em grandes conjuntos de dados, o tamanho do conjunto de resultados para cada consulta considerada é limitado ao valor de window_size, que por padrão é 100 conforme descrito na documentação.
k e windows_size também pode ser configurado dentro da configuração Rrf dentro do método Rank no cliente Go, conforme o exemplo abaixo:
Conclusão
Aqui discutimos como combinar a pesquisa vetorial e a pesquisa por palavra-chave no Elasticsearch usando o cliente Elasticsearch Go.
Confira o repositório do GitHub para acessar todo o código desta série. Caso ainda não tenha feito, confira a parte 1 e a parte 2 para ver todo o código desta série.
Boa caçada aos esquilos!




