Como fazer pesquisas (inteligentes) usando Ruby On Rails + ElasticSearch

Para que Serve? Atende a sua necessidade? 🙂

Muitos tipos de aplicativos precisam de um sistema de busca de resultados como por exemplo o Airbnb para encontrar casas, o Tinder para encontrar um pretendente, o Google para encontrar a página que você busca e etc.

Existem muitas maneiras de fazer esse tipo de busca dentro do Rails e o mais comum de se ver em Apps pequenos são pesquisas direto no banco de dados usando “where” (ou “query sql”). Esse método funciona, mas tem um baixo desempenho quando você precisa fazer dezenas (centenas ou milhares) de pesquisas por minuto e ele também precisa de muitas adaptações para remover acentos, aceitar palavras parecidas, etc.

Uma opção muito boa para evitar fazer na “mão” todo esse tratamento e ainda ter uma performance excelente é usar o ElasticSearch que é um servidor de buscas baseado no Apache Lucene. Ele consegue fazer buscas inteligentes encontrando os resultados mesmo que o usuário erre a acentuação, escreva palavras separas juntas (como por exemplo “the beatles” sendo escrito “TheBeatles”) e etc.

Então vamos lá, vamos ver como integrar ele com o Rails e criar sua busca inteligente.

O que vamos aprender?

Como criar um App usando Ruby On Rails que pode se comunicar com o ElasticSearch e fazer buscas inteligentes para encontrar resultados baseados em keywords digitadas pelo usuário. Mais especificamente, nós vamos criar um App para o usuário digitar palavras chaves e encontrar alguns Seriados que possuam essas palavras digitadas, como por exemplo “Marvel”, “Suspense” e etc.

INGREDIENTES
Objetivos (Passo a Passo)
  1. Criar o projeto e configurar a base para a pesquisa
  2. Criar uma interface gráfica para o usuário poder realizar a pesquisa
  3. Incluir a busca no App
Mãos à Obra \o/
Criar o projeto e configurar a base para a pesquisa

Nessa etapa nós vamos criar o projeto, instalar as Gems, criar nosso Model e Controller Series e instalar o ElasticSearch, vamos lá:

  1. Vamos criar o nosso projeto usando a ajuda do Rails Composer que é uma ferramenta que te ajuda a criar o projeto com as principais bibliotecas já instaladas (te permitindo escolher direto no shell quais Gems você deseja), rode:

    *No shell ele vai te questionar sobre quais Gems ou serviços você quer que venham pré instaladas, na primeira opção escolha o numero 3 (Custom application (experimental)), nas próximas perguntas escolha sempre a opção numero 1 até que ele te pergunte sobre o Front-end framework, nessa pergunta você deve escolher a opção numero 3 (Bootstrap 3.3) e novamente em todas as outras opções escolha a opção numero 1 ou N.
    (Foi um sufoco tantas opções, mas pelo menos agora você conhece o Rails Composer \o/ )
  2. Coloque o elastickick no seu Gemfile:
  3. Vamos rodar o bundle para instalar a gem:
  4. Crie o Model Series com os campos name, description e link (para armazenarmos as series que vamos pesquisar):
  5. Crie agora o Controller Series para podermos fazer a pesquisa
  6. Agora vamos configurar nossas rotas para o Series Index estar no root, no seu routes.rb coloque:
  7. Rode no seu console o comando para criar o banco de dados e rodar as migrations que criamos junto com o Model Series:
  8. Rode o servidor
  9. Veja seu projeto no browser acessando http://localhost:3000/
  10. Agora para finalizar essa etapa, vamos instalar o ElastichSearch no linux (caso você esteja no mac ou windows acesse:  https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html)
    1. Primeiro instale o Java (É uma dependência do ElasticSearch):
    2. Agora baixe o elasticsearch:
    3. Instale o pacote:
    4. Vamos dar o start no ElasticSearch, primeiro rode:

      Caso o resultado seja como a baixo “systemd”:
      captura-de-tela-de-2016-11-05-00-16-01Então rode:

      Caso o resultado seja “init”, rode

    5. Vamos testar para ver se o Elasticsearch está funcionando corretamente:

      captura-de-tela-de-2016-11-04-23-07-39
      *O ElasticSearch pode ser um pouco ‘chato’ de instalar, caso você não receba um json como resultado, dê uma olhada nesse link da documentação oficial de instalação: https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
      Outras configurações para deixar o ElasticSearch mais seguro e aumentar a performance podem ser encontrados em: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-16-04

  11. Pronto \o/ vencemos a primeira etapa, agora é só alegria 🙂
Criar uma interface gráfica para o usuário poder realizar a pesquisa

Agora nós vamos criar a View para que o nosso usuário posso realizar as pesquisas e também vamos entrar com alguns dados de teste no banco de dados para que nós possamos mostrar nossos resultados iniciais.

  1. Eu criei previamente um modelo de Html bem simples usando Bootstrap para a página de Pesquisa para podermos manter o foco apenas no fluxo da pesquisa, então para simplificar copie o código a baixo no arquivo /app/views/series/index.html.erb:
  2. Agora vamos inserir algumas series no banco de dados, rode no console:
  3. Agora rode todos esses comandos no console do rails:

     

     

     

     

     
  4. Rode o projeto e dê uma olhada no resultado:

    O resultado deve ser o mesmo que abaixo:
    most visited free dating site in usa
  5. Parabéns, passamos mais uma fase \o/ rumo ao sucesso.
Incluir a busca no App

Nesta parte de conclusão do tutorial nós vamos finalmente conectar o nosso App ao ElasticSearch e realizar algumas buscas. Primeiro nós precisamos “criar” o banco de dados no ElasticSearch, e a cada nova inclusão de dados no nosso banco automaticamente nós vamos alimentar também o banco de dados do ElasticSearch.

  1. Para começar vamos adicionar o Elastichkick ao nosso Model Series, em /app/models/series.rb substitua por:
  2. Agora vamos criar o banco no ElasticSearch, rode os seguintes comandos:
    1. Primeiro
    2. E agora para criar o banco associado ao model rode:

      the best muslim dating sites
  3. No nosso controller Series, vamos colocar o comando para pesquisar nos campos name e description a frase que digitarmos no campo de busca, em /app/controllers/series_controller.rb substitua por:
  4. Excelente, agora nós já estamos prontos, rode o servidor:
  5. Vá até o console e faça suas buscas http://localhost:3000, perceba que você pode colocar acentuações incorretas ou até mesmo separar incorretamente as palavras e mesmo assim ele vai encontrar os resultados corretos.
    Existem muitas opções para você configurar suas pesquisas, veja as principais clicando nesse link https://github.com/ankane/searchkick
    captura-de-tela-de-2016-11-04-22-21-52
  6. Parabéns nós conseguimos fazer um sistema de buscas conectando o Rails e o Elastichsearch \o/.


12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas o/



CONCLUSÃO

Usar o ElasticSearch através do Searchkick é bem simples e vai te dar um meio de fazer pesquisas de nível profissional. Então se você precisa deste tipo de função este pode ser o caminho para você.

Como de costume o Código completo da aplicação está no Github, caso você queria clonar o código, clique aqui. Aproveita e me segue lá \o/

Apenas fazendo um merchandising do bem, uma empresa que eu participo é o NegocieApp.com, um site para enviar propostas comerciais (Mandar orçamentos e etc para clientes) onde você e a sua equipe podem negociar com o cliente pela plataforma e ter um relatório sobre o numero de sucessos nas negociações e etc, é bem bacana, dá uma olhada lá 🙂
banner-cta

Se você ficou com dúvidas ou tem sugestões de posts para o Blog comenta aí em baixo ou me adiciona no Facebook clicando aqui.

Muito Obrigado,
Sua presença aqui é uma honra para mim,
Leonardo Scorza 🙂


Primeira vez no OneBitCode? Curtiu esse conteúdo?
O OneBitCode tem muito mais para você!


O OneBitCode traz conteúdos de qualidade, e em português, sobre programação com foco em Ruby on Rails e também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

janeiro 17, 2020

Feito com s2 por OneBitCode