Impulsojunte-se à Impulso

08/07/21

16 min de leitura

ElasticSearch com Ruby on Rails: como programar com mais agilidade

Igor MaelIgor Mael

Adquirir novas habilidades e aprender linguagens de programação elevam as oportunidades tanto de pessoas desenvolvedoras que buscam trabalho quanto dos profissionais independentes. Também é indicado conhecer os principais frameworks delas e os recursos relacionados. Isso vale para o ElasticSearch com Ruby on Rails!

Dessa forma, você poderá acelerar o desenvolvimento de programas, além de simplificar o seu trabalho no dia a dia. No caso do Ruby, vale destacar que ele está entre as dez linguagens de programação mais populares, com cerca de 1,5 milhão de pessoas desenvolvedoras.

É o que apontou a 19° edição do estudo “State of the Developer Nation“, da SlashData. A pesquisa foi feita com mais de 17 mil pessoas desenvolvedoras, em 159 países, no terceiro trimestre de 2020.

Portanto, a linguagem Ruby é uma das mais populares do mercado, sendo usada para o desenvolvimento de aplicativos, IoT, Cloud Computing, etc. Já o Ruby on Rails é um dos frameworks mais populares dessa linguagem, enquanto o ElasticSearch é um mecanismo de buscas.

Adiante, veremos melhor como esses dois funcionam e porque podem ser úteis para você. Portanto, continue lendo e confira o que preparamos!

O que é Ruby

O Ruby é uma linguagem de programação desenvolvida por Yukihiro “Matz” Matsumoto, no Japão, em 1995. Os programas desenvolvidos com Ruby utilizam o padrão Model-View-Controller (MVC). Veja mais de suas características:

  • orientada a objetos;
  • tipagem forte e dinâmica;
  • linguagem interpretada multiparadigma, o que permite suportar paradigmas como a reflexiva, o funcional, a imperativa e a orientada a objetos;
  • gestão automática de memória;
  • métodos de criação de códigos em simultâneo, isto é, em tempo real;
  • variáveis são objetos;
  • usa Code Blocks. Aliás, os blocos fornecem flexibilidade. Isso porque é possível adicionar uma closure a qualquer método, descrevendo como ele precisa se comportar. Inclusive, a closure é chamada de bloco;
  • os blocos têm por inspiração linguagens funcionais;
  • o Ruby suporta somente herança simples. Contudo, há o conceito de módulos, isto é, coleções de métodos;
  • o item acima nos leva aos mixins. Em outras palavras, o modo de incluir métodos a uma classe sem herança de outra classe. Nesse caso, as classes são capazes de realizar um mixin de um módulo, de modo a obter todos os métodos do módulo de modo direto;
  • todos os tipos são classes, ou seja, não há “tipos primitivos”;
  • não precisa de declarações de variáveis. O Ruby emprega apenas convenções de nomes simples para caracterizar o escopo das variáveis;
  • disponibilidade em Linux, Windows, Mac OS X e outras plataformas.

Vale destacar que o criador do Ruby mesclou “pedaços” das suas linguagens favoritas, como Smalltalk, Perl, Python, Eiffel, Ada e Lisp. 

Aliás, alguns dos intuitos era que Ruby fosse mais orientada a objetos do que Python. Também queria uma linguagem de script com maior performance do que Perl.

O que é Ruby on Rails

O que é Ruby on Rails

Ruby on Rails, também chamado de RoR ou Rails, basicamente se trata de um framework livre, escrito em Ruby, multiplataforma, lançado em 2004.

O seu propósito é facilitar e elevar a velocidade de desenvolvimento de sites orientados a bancos de dados. Isso porque, com o uso dele, dá para desenvolver aplicações baseadas em estruturas pré-definidas.

Vantagens do Ruby on Rails

Vantagens do Ruby on Rails

De certo modo, o RoR é simples de usar. Além disso, é dinâmico e direto. Com ele, é possível para desenvolver aplicações web de maneira ágil e fácil.

Também é importante mencionar que ele conta com muitas bibliotecas de códigos reutilizáveis, conhecidas como Gems (veremos melhor sobre isso depois). Com uma linha de comando, é possível ativá-las rapidamente.

Dessa forma, obtém-se maior praticidade durante o desenvolvimento, economizando tempo para outras atividades. Além disso, o framework continua sendo melhorado, com base em boas práticas da área Dev.

Podemos citar, como exemplo, o “Não se Repita”, isto é, um conceito de evitar repetições de códigos. Também dá para mencionar a utilização de testes unitários. Nos projetos, a padronização de pastas é outra prática fomentada.

Também temos como fator positivo as oportunidades de mercado, pois o Ruby é utilizado (ou já foi) por muitas empresas. Inclusive, algumas bem conhecidas, como Airbnb, Hulu, Twitter, entre outras.

Soluções para as quais o Ruby on Rails é recomendado

recomendações ElasticSearch com Ruby on Rails

Conforme apontado na pesquisa da SlashData, o uso do Ruby tem sido mais popular na Internet das Coisas (IoT), em Computação em Nuvem e no desenvolvimento de aplicativos. No entanto, a linguagem não se restringe a isso (nem o RoR).

Afinal, as possibilidades do Ruby são amplas, de modo que ele pode ser empregado no desenvolvimento de aplicações para desktop, em sistemas embarcados. O RoR, por sua vez, facilitou muito a criação de aplicações web.

O que é ElasticSearch

Basicamente, podemos conceituar o ElasticSearch como uma ferramenta de buscas de texto completo e distribuído. Veja alguns de seus atributos:

  • mecanismo baseado na biblioteca Lucene;
  • capacidade para vários locatários;
  • interface da web HTTP;
  • documentos JSON sem esquema.

De modo específico, o site oficial desse recurso o define como uma ferramenta de análise de dados. Além disso, é um instrumento de busca RESTful distribuído. 

Em questão de potencial, o ElasticSearch é capaz de atender a uma quantidade crescente de casos de utilização. Também é elemento central do Elastic Stack, um conjunto de softwares de código aberto. 

Esse grupo foi planejado e desenvolvido para auxiliar os usuários a encontrarem tipos de fontes, em qualquer formato. Também é utilizado para buscar, visualizar e avaliar os dados obtidos, em tempo real.

O ElasticSearch armazena dados de maneira central. Isso é feito para permitir uma busca rápida e analítica, a qual pode ser aumentada com certa facilidade. Outro intuito da ferramenta é que apresente relevância com ajuste fino.

Para que serve o ElasticSearch

Basicamente, o ElasticSearch serve para fazer buscas concisas e rápidas. Por meio disso, é possível gerar relatórios, dashboards e armazenar logs para visualizar depois, além de estatísticas em geral. Por conta de sua rapidez e concisão, é interessante usar o ElasticSearch em sistemas com grande vazão de dados.

Por que usar o ElasticSearch

Por que usar ElasticSearch com Ruby on Rails

Existem vários motivos para usar essa solução, como o fato de ela ser open source. Além disso, conta com uma grande comunidade. Só no GitHub, o seu repositório já conta com quase 55 mil estrelas dadas pelos participantes.

A alta velocidade da ferramenta é outro de seus diferenciais. Para isso, ele usa a API do Apache Lucene. Nesse caso, o método de indexação usado é a busca por índice reverso. A maneira como os índices são armazenados torna mais fácil que o ElasticSearch traga as informações pesquisadas.

Também é preciso pontuar a sua arquitetura distribuída e escalável, por padrão. Dessa forma, se você quiser escalar a sua aplicação, o seu serviço de buscas, você poderá colocar essa solução em quantos servidores quiser, pois ela lidará bem com isso.

A ideia do ElasticSearch é ser usado para full text, ou seja, pesquisas de texto completo. Ela descobre rapidamente as instâncias de uma palavra ou termo em uma tabela sem que seja preciso digitalizar linhas. Também não é necessário saber em qual coluna um termo é armazenado.

O full text funciona empregando índices de texto. É possível ver um exemplo desse recurso em ação ao digitar algo no Google. Nesse momento, o motor de buscas traz algumas antecipações de resultados. Isso é, basicamente, o full text acontecendo.

Outra vantagem é que dá para fazer queries complexas. Além do mais, quando você salva uma informação em um índice, o ElasticSearch tem um tempo mínimo de alguns milissegundos para que essa informação fique disponível para busca.

Gems

Gems são bibliotecas de códigos reutilizáveis do Ruby. Elas são gerenciadas pelo RubyGems, um sistema de distribuição de pacotes que simplifica o desenvolvimento e a instalação das Gems, bem como o compartilhamento dessas bibliotecas. O ElasticSearch tem algumas Gems, como:

  • elasticsearch-ruby (oficial);
  • elasticsearch-rails (oficial);
  • chewy;
  • searchkick.

As duas primeiras são oficiais, ou seja, da própria ElasticSearch. Elas podem ser usadas para criar e adaptar interfaces de queries da maneira como preferir.

Searchkick

O searchkick merece um destaque a mais, pois faz, digamos, o “trabalho” do Active Record para o ElasticSearch no Ruby on Rails. Além disso, conta com uma indexação muito simples.

Depois de instalar essa Gem, no model em que deseja ter o ElasticSearch, você precisa adicionar a linha “searchkick”. A partir daí, a sua integração estará completa e seus índices (models que virarão índices) ficarão atualizados de maneira automática.

Também é possível fazer isso manualmente. Além disso, por padrão, todas as colunas de um model são indexadas. Vale destacar que é fácil realizar buscas com o searchkick. Outros pontos interessantes dessa Gem são:

  • sintaxe é parecida com o Actice Record;
  • paginação funciona integrada do ElasticSearch;
  • suporta DSL do ElasticSearch;
  • ao fazer pesquisa de texto completo dá para colocar uma querie específica (dentro do campo “where”), limitar, dar boost por algum campo que você queria dar maior relevância etc.

Aggregations

Um recurso interessante envolve os chamados “aggregations”, que fornecem dados de pesquisa agregados. Por exemplo, em uma lista de produtos, os “aggregations” seriam a quantidade de cada categoria das mercadorias.

Vale mencionar que, em uma arquitetura convencional, seria preciso fazer várias queries ao mesmo tempo para carregar essas informações e poder mostrar isso. No caso do ElasticSearch, basta fazer uma querie e setar (definir valores) quantos “aggregations” baseados em tipos desejar. Por exemplo, de soma, de média, entre outros.

Se quiser fazer um autocomplete baseado nas primeiras letras de algum campo, é possível utilizar uma opção do searchkick que permite definir por onde começar a busca. Ou seja, se pela palavra inteira (word), pelo meio dela (word_middle), pelo fim dela (word_end), etc.

Dessa forma, você pode, por exemplo, incluir um autocomplete de certos produtos, pelo começo de cada palavra (word_start), em uma coluna de uma tabela. Coluna essa que especifique esses produtos, como uma identificada como “name”.

A partir desse processo, conhecido como “mapeamento”, no ElasticSearch, o sistema encontrará esse mapeamento e antecipará os resultados conforme as primeiras palavras do campo (coluna) “name”.

Isso permite dar maior relevância para certos campos, de modo a proporcionar uma busca mais rápida e com um autocomplete mais preciso para o usuário.

Em suma, o searchkick é uma ferramenta bem completa, na qual dá para fazer vários tipos de buscas. Isso pode ser útil na hora de trazer dados com maior qualidade. Além do mais, com ela, o desenvolvimento também é simplificado.

Cuidados com o ElasticSearch

Dá para substituir as buscas do Active Record pelas do ElasticSearch, pois o modo de realizar as pesquisas é muito parecido. No entanto, é importante pensar em infraestrutura e no sistema funcionando em produção.

Isso porque para você manter um servidor ElasticSearch, ou instâncias dele, existem custos. As ferramentas que existem normalmente cobram por shards — basicamente as ramificações dos seus índices.

Sendo assim, não é recomendado “sair colocando” o searchkick em todos os seus models do projeto. Afinal, você precisará ter uma infraestrutura de ElasticSearch que precisará dar conta disso. E isso custa dinheiro.

Nesse caso, é possível definir em que locais empregar a ferramenta. Em outras palavras, mapear pontos específicos, baseados em critérios de necessidade, que precisam de pesquisas e resultados rápidos.

Por exemplo, em um fluxo de pagamento, digamos que você necessita checar se um cliente tem um cupom não usado para empregá-lo no momento. Nesse caso, dá para usar o ElasticSearch e conseguir um resultado rápido, em milissegundos, sobre isso.

Em suma, a dica é colocar ElasticSearch apenas nos models que fazem sentido em vez de incluí-lo em todos. Isso poderá gerar economia para você.

Conceitos de ElasticSearch

Para entender melhor sobre essa ferramenta de buscas, é interessante saber alguns conceitos e terminologias antes. Para tanto, montamos uma pequena lista com alguns dos termos mais usados nessa ferramenta. Aliás, alguns já foram mencionados, mas vale a pena recapitular. Confira! 😉

Cluster e nodes

Se você quiser ampliar a capacidade da ferramenta, é possível adicionar nodes (nós), que são os servidores, a um cluster. Nesse caso, o ElasticSearch distribuirá os dados de maneira automática por eles (os que estejam disponíveis), bem como a consulta de carga.

Nesse caso, não é preciso revisar seu app, pois o Elasticsearch entende como equilibrar clusters de vários nós para entregar disponibilidade e escala.

Vale destacar que os nós de um cluster necessitam estar em uma mesma rede para se ter uma performance maior. De outro modo, balancear shards, em um cluster entre nós em data centers distintos, consome mais tempo.

Aliás, é necessário destacar a Cross-Cluster Replication (CCR), ou Replicação entre Cluster. Esse recurso fornece um modo de sincronizar índices do cluster primário para outro secundário, remoto, que sirva como backup dinâmico.

Isso é feito de maneira automática. Dessa forma, o segundo pode assumir funções do primeiro em caso de esse apresentar problemas.

Índice

Um índice do Elasticsearch consiste em um agrupamento lógico de um ou mais shards físicos, nos quais cada shard se trata de um índice autocontido.

Para assegurar redundância, o ElasticSearch distribui documentos em um índice em diversos shards, e esses em vários nós. A redundância protege de falhas de hardware.

Além disso, eleva a capacidade de consulta à medida que os nós são adicionados a um cluster. Outro ponto interessante é que, conforme o cluster muda de tamanho, os shards são migrados automaticamente para reequilibrar o cluster.

Shard

Shard, algo como “fragmento”, refere-se a uma unidade em que o Elasticsearch distribui dados no cluster. Basicamente, um shard consiste em uma instância de índice de Apache Lucene, ou seja, uma “parte” em que a instância é dividida.

Ao gerar um índice, o padrão é que cinco shards sejam feitos. Eles são índices de Lucene, em que são indexados e buscados documentos.

Depois de um erro, a rapidez com que o ElasticSearch é capaz de mover shards, ao rebalancear dados, dependerá da quantidade de shards, do tamanho deles e da performance do disco e da rede.

O ElasticSearch distribui documentos pelos shards por meio de um controle de hash, em que faz uma hash do documento. Partindo dela, o documento é enviado para um dos shards.

Um cuidado importante para se ter é com o excesso de shards. No caso da ferramenta, a quantidade desses fragmentos em um node é proporcional ao espaço disponível de heap. Em geral, a quantidade por GB de espaço de heap precisa ser menor do que 20 shards.

Réplica

É importante destacar que o ElasticSearch possibilita copiar shards do seu índice no que é conhecido como “shards de réplica” (ou só réplica). Além do shard, um index pode ser replicado zero ou mais vezes.

Sendo assim, temos dois tipos de shard, ou seja, o de réplicas e os primários. Cada documento, constante em um índice, é de um shard primário. Dessa forma, o de réplica é simplesmente cópia de um primário.

Dessa forma, as réplicas conseguem entregar cópias redundantes de seus dados. Por sua vez, isso é capaz de defender a solução contra erros de hardware, além de elevar a capacidade de atender a solicitações de leitura. Por exemplo, a de pesquisa.

Vale destacar que a quantidade de shards primários, constantes em um índice, é estabelecida no momento em que tal índice é feito. De igual modo, a quantidade de shards réplicas pode ser estabelecida por índice no ato de criação do índice.

No entanto, é possível alterar o número deles a qualquer instante, sem que seja preciso parar as operações de consulta ou indexação.

A importância de um sistema de buscas rápido e eficiente

Um aspecto que reforça a vantagem do ElasticSearch com Ruby on Rails é a necessidade atual de contar com sistemas de pesquisa rápidos e dinâmicos.

Nesse caso, tal atributo se tornou requisito para quem deseja oferecer uma experiência positiva de navegação para usuários, a fim de mantê-los satisfeitos e por mais tempo em uma solução web.

Em tempos em que a demora de alguns segundos pode fazer com que a pessoa desista de permanecer em um programa, site ou app, uma ferramenta como o ElasticSearch se torna um diferencial.

Além disso, os resultados também precisam ser de qualidade, para não frustrar quem pesquisa. No caso de soluções corporativas, a velocidade de apresentação de resultados é essencial para que as equipes da empresa consigam encontrar dados.

Dessa forma, poderão desempenhar suas atividades com maior agilidade, enquanto melhoram a gestão do tempo. O mesmo vale para o time de TI.

Os benefícios para quem atua com ElasticSearch com Ruby on Rails

benefícios em atuar com ElasticSearch com Ruby on Rails

De maneira geral, podemos dizer que a pessoa desenvolvedora que trabalhar usando ElasticSearch com Ruby on Rails, terá como aumentar a sua agilidade na hora de programar.

Consequentemente, será possível aumentar a produtividade. Isso de maneira simplificada, uma vez que esse framework fornece muitos recursos fáceis de se usar.

Outro ponto a destacar é que a rapidez de pesquisa do ElasticSearch, especialmente com o searchkick, confere maior agilidade e satisfação para quem precisa usar essa ferramenta, principalmente para os usuários.

Como os resultados aparecem quase que de maneira instantânea, a tendência é economizar tempo e agilizar a busca de dados essenciais para o trabalho no dia a dia, tanto da área de TI quanto dos demais setores de uma empresa.

Vale destacar que mesmo que se incluam palavras com acentuação equivocada ou se divida incorretamente os termos, a tendência é o sistema identificar resultados relevantes. Além do mais, a flexibilidade desta solução permite alterar a performance da pesquisa, bem como aprimorar diversos conjuntos de dados. O mesmo ocorre para casos de uso.

Por fim, a utilização de ElasticSearch com Ruby on Rails pode auxiliar quem deseja um sistema de buscas rápido e dinâmico em seu programa web. Em especial, para quem programa utilizando a linguagem Ruby. Dessa forma, poderá incrementar o seu trabalho mais rapidamente.

Gostou de entender como ElasticSearch com Ruby on Rails pode ajudar você a implementar uma ferramenta de pesquisa avançada? Se você trabalha com React, no Javascript, aproveite agora para saber como manipular formulários com Formcat, ou, confira abaixo o Impulso Talks: Ruby on Rails e entenda sobre técnicas abordando arquitetura, produto, MVPs e muito mais! 🎬

Nós usamos cookies para melhorar sua experiência no site. Ao aceitar, você concorda com nossa Política de Privacidade

Assine nossa newsletter

Toda semana uma News com oportunidades de trabalho, conteúdos selecionados, eventos importantes e novidades sobre o Mundo da Tecnologia.

Pronto, em breve você vai receber novidades 👍