Alternativa para Elasticsearch no Laravel?

Fala galera!

Eu vou escrever um pequeno artigo de sugestão de como utilizar uma alternativa para elasticsearch no laravel 5.1. Claro que esta ferramenta não carrega consigo o mesmo potencial do elasticsearch, porém é uma ótima alternativa para pequenos projetos e interações. ou não.

Há algumas semanas precisei implementar um sistema de busca genérico no sistema de controle interno da empresa. Simples o uso, ao pesquisar por um termo iria varrer todo o sistema, entre clientes, tickets, changelog’s e etc. Através do termo digitado iria retornar todo referência que continha tal termo. Pow! Que trabalhão! Utilizar o PHP para esse intuito? não faça isso jamais! Vamos manter o senso de responsabilidade.

Eu conhecia o uso do elasticsearch, mas achei “pau para muita obra”. Por ser uma aplicação interna, relativamente pequenas e de pouco fluxo decidi procurar alternativas. Pois bem pequeno gafanhoto, foi ai que encontrei este cara.

Algolia

Algolia trata-se de uma plataforma de hosted cloud search as a service, o famoso SaaS. Leva consigo o mesmo intuito do elasticsearch em sua essência.

Não vou me atentar a muitos detalhes de utilização e objetivo por acreditar que você que esteja lendo este artigo certamente já conheça o objetivo do uso de elasticsearch. Mas se não conhece recomendo da uma leve pesquisa antes de prosseguir.

De primeira implementação eu fiz o uso do pacote spatie/searchindex. Ele deu certamente conta do recado, mas algumas funções ainda não foram implementadas nele, como por exemplo paginate. Ai encontrei um outro pacote o mmanos/laravel-search. Eu ainda não fiz uso dele, mas me pareceu bem mais completo a implementação.

Não vou abordar como instalar, ambiente e configurações. Não é tão complicado configurar. Primeiro passo você precisará criar conta no site. Existem vários planos para diversas demandas, porém o plano free é até bem grande e da conta de uma aplicação pequena, então é só analisar sua aplicação e necessidade, mas cuidado com o “on demand” em ;)

Na aplicação eu fiz apenas pequenas mudanças para fazer a indexação do banco. Primeiramente criei um console command que fosse responsável por varrer os registros já criados e indexar eles na plataforma.

console command

Desta maneira me certifiquei que todos os clientes já cadastrados na plataforma fossem indexados. Porém foi preciso agora alterar duas partes do repositório, qual é responsável pela criação de novo cliente e remoção. Consequentemente será preciso indexar e desindexar do search tal informação.

Ressaltando que é preciso passar uma entidade, não collection. É, acredita que apanhei nisso? Lá estava eu tentando passar a collection para o algolia indexar. Que mancada cara!

Como minha plataforma não trabalha com remoção de cliente, não foi preciso alterar essa rotina, mas caso fosse preciso será só utilizar o método removeFromIndex :)

Pronto, minha plataforma já estaria com todos os clientes indexados e pronto para o uso do search. Bastasse eu pesquisar:

SearchIndex::getResults('client name');

Que será me retornado os indexes referente a pesquisa. Simples, prático e rápido.

Achei sensacional o uso e proposta do algolia para minha demanda e especificações. Desconheço outras plataformas com o mesmo intuíto, se você conhecer alguma da um toque!

Pronto amiguinhos, aprendemos algo novo e incrível hoje.

Cya.