Execute consultas de texto com o cliente Elasticsearch Go.

Aprenda como realizar consultas de texto tradicionais no Elasticsearch usando o cliente Elasticsearch Go por meio de um exemplo prático.

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:

  1. Instalação do Go versão 1.21 ou posterior
  2. Crie seu próprio repositório Go usando a estrutura recomendada e o gerenciamento de pacotes abordados na documentação do Go.
  3. 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:

  1. ID da nuvem e chave de API, caso esteja utilizando o Elastic Cloud.
  2. 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.

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:

  1. Remoção de caracteres desnecessários através de zero ou mais char_filters. Em nosso exemplo, estamos removendo elementos HTML dentro do campo body_content através do filtro html_strip .
  2. Separando os tokens do conteúdo com o tokenizador standard , que irá separar por espaçamento e pontuação chave.
  3. Remover tokens indesejados ou transformar tokens do fluxo de saída do tokenizador usando zero ou mais opções filter , como o filtro de token lowercaseou stemmers como o stemmer snowballpara 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!

Recursos

  1. Guia do Elasticsearch
  2. Cliente Go do Elasticsearch
  3. Entendendo a Análise no Elasticsearch (Analisadores) por Bo Andersen | #CodingExplained

Conteúdo relacionado

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)