Experimente o Elasticsearch na prática: Mergulhe em nossos notebooks de amostra, inicie um teste gratuito na nuvem ou experimente o Elastic em sua máquina local agora mesmo.
Desenvolver software em qualquer linguagem de programação, incluindo Go, é comprometer-se com uma vida inteira de aprendizado. Ao longo de sua trajetória universitária e profissional, Carly precisou se adaptar a ser poliglota e experimentar diversas linguagens de programação, incluindo Python, C, JavaScript, TypeScript e Java. Mas isso não foi suficiente! Recentemente, ela também começou a jogar Go!
Assim como os animais, as linguagens de programação e um de seus autores favoritos, a busca passou por uma evolução de diferentes práticas, o que pode dificultar a escolha da melhor opção para o seu caso específico. Neste blog, compartilharemos uma visão geral da pesquisa tradicional por palavras-chave, juntamente com um exemplo usando o Elasticsearch e o cliente Elasticsearch Go.
Pré-requisitos
Para dar continuidade a este exemplo, certifique-se de que os seguintes pré-requisitos sejam atendidos:
- 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.
- Criação do 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
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 mostrado mais adiante.
Pesquisa por palavra-chave
A busca por palavras-chave é o tipo de busca fundamental com o qual estamos familiarizados desde a criação do Archie, o primeiro mecanismo de busca documentado na internet, escrito em 1990.
Um componente central da busca por palavras-chave é a tradução de documentos em um índice invertido. Assim como o índice encontrado no final de um livro didático, um índice invertido contém um mapeamento entre uma lista de palavras-chave e sua localização em cada documento. O diagrama abaixo mostra as principais etapas de geração do índice:

Conforme mostrado acima, a geração de tokens no Elasticsearch compreende três etapas principais:
- Remoção de caracteres desnecessários através de zero ou mais
char_filters. Em nosso exemplo, estamos removendo elementos HTML dentro do campobody_contentatravés do filtrohtml_strip. - Separando os tokens do conteúdo com o tokenizador
standard, que irá separar por espaçamento e pontuação chave. - Remover tokens indesejados ou transformar tokens do fluxo de saída do tokenizador usando zero ou mais opções
filter, como o filtro de tokenlowercaseou stemmers como o stemmersnowballpara transformar tokens de volta à sua raiz de idioma.
Pesquisando no Elasticsearch com Go
Ao realizar consultas com o cliente Go, especificamos o índice que desejamos pesquisar e passamos a consulta e outras opções, como no exemplo abaixo:
No exemplo acima, realizamos uma consulta matchpadrão para encontrar qualquer documento em nosso índice que contenha a string especificada passada para nossa função. Observe que passamos um novo contexto vazio para a execução da pesquisa por meio de Do(context.Background()). Além disso, quaisquer erros retornados pelo Elasticsearch são enviados para o atributo err para registro e tratamento de erros.
Os resultados são retornados em res.Hits.Hits com o atributo _Source contendo o próprio documento em formato JSON. Para converter essa fonte em uma estrutura compatível com Go, precisamos desserializar a resposta JSON usando o pacote `encoding/json` do Go, como mostrado no exemplo abaixo:
A busca e a desserialização da consulta gopher retornarão a página da Wikipédia sobre Gopher, como esperado:
No entanto, se consultarmos What do Gophers eat? , não obtemos exatamente os resultados que desejamos:
Uma simples busca por palavra-chave permite que os resultados sejam retornados ao seu aplicativo Go de forma eficiente e com a qual já estamos familiarizados a partir dos aplicativos que utilizamos. Também funciona muito bem para correspondências exatas de termos relevantes para cenários como a busca por uma empresa ou termo específico.
No entanto, como podemos ver acima, ele tem dificuldades em identificar o contexto e a semântica devido ao problema de incompatibilidade de vocabulário. Além disso, o suporte para formatos de arquivo não textuais, como imagens e áudio, é um desafio.
Conclusão
Aqui discutimos como realizar consultas de texto tradicionais no Elasticsearch usando o cliente Elasticsearch Go. Dado que o Go é amplamente utilizado para scripts de infraestrutura e construção de servidores web, é útil saber como pesquisar em Go.
Confira o repositório do GitHub para acessar todo o código desta série. Continue para a parte 2 para obter uma visão geral da pesquisa vetorial e como realizar pesquisas vetoriais em Go. Até lá, boa caçada aos esquilos!
