Seu site tão rápido quanto o Google usando ElasticSearch
O ElasticSearch é um mecanismo de busca open source construído em cima do Apache Lucene, poderoso motor de busca full-text.
Muitos sites são referências na área em que atuam devido à relevância do conteúdo. Mas não basta oferecer informação/produto/serviço de qualidade, é preciso fazer com que o usuário encontre o que ele tanto procura. Sabe por quê? Porque quando ele não acha o que precisa, desiste e abandona o site.
E agora, o que devemos fazer? Uma solução é utilizar um mecanismo de FullTextSearch do MySQL↳MySQL8 conteúdosMySQL + Adminer + Docker Compose: montando rapidamente um ambiente para usoData · abr 2019Banco de dados MYSQL no PHPStormDev (Back & Front) · jul 2019Criando um ambiente de desenvolvimento PHP mínimo com Docker – Parte 3Dev (Back & Front) · out 2019Ver tudo em Data → que, aparentemente, irá resolver o problema por um tempo. Mas digamos que o CEO de sua loja virtual resolva fazer uma megaliquidação, no Black Friday (por exemplo) e, para turbinar os acessos e vender ainda mais, promove uma megacampanha no Google e no Facebook. De repente, o fluxo de pessoas procurando desesperadamente por promoções no site aumenta 10 vezes. É aí que começa a complicar para você que resolveu utilizar o FullTextSearch.
Será que você estava de fato preparado para enfrentar essa situação? Acho que você não vai querer surpresas e descobrir da pior maneira que não estava pronto para todo esse fluxo. É justamente nesse ponto que o ElasticSearch irá te ajudar.
O ElasticSearchO ElasticSearch é um mecanismo de busca open source↳Open source71 conteúdosComo o Open Source Está Liberando o Poder da Automação para TodosDev (Back & Front) · out 2025Código aberto: programadores criam software da NASA sem saberDev (Back & Front) · abr 2021N8N: O que é a ferramenta open source que está revolucionando a automação em TI?Dev (Back & Front) · dez 2025Ver tudo em Dev (Back & Front) → construído em cima do Apache Lucene, poderoso motor de busca full-text. Esse recurso conta com uma amigável RESTFul API, dados em tempo real, alta disponibilidade, documentos de orientação, entre outras características.
Empresas como GitHub, Twitter, Google, Ebay, FourSquare, Bloomberg, The Guardian, Globo.com, Yelp e Moip já usam o ElasticSearch em produção para buscar e agregar em tempo real.
Colocando o ElasticSearch para funcionarA instalação do mecanismo é bem simples. Basta fazer download da última versão, descompactar e rodar bin/elasticsearch. Ou acessar bin/elasticsearch.bat e em fazer uma requisição $ curl -XGET http://localhost:9200/.
Alguns conceitos antes de começarPara facilitar a compreensão de alguns conceitos e termos, elaboramos uma tabela comparativa do ElasticSerarch com um banco de relacional (MySQL):
| MySQL | ElasticSearch |
| Database | Index |
| Table | Type |
| Row | Document |
| Column | Field |
| Schema | Mapping |
| Partition | Shard |
Outro conceito muito importante é entender como ele armazena os seus documentos. Quem já utilizou um banco de dados NoSQL, como MongoDB, não terá problema em compreender. Esse mecanismo utiliza a estrutura de JSON, suportada pela a maioria das linguagens de programação.
Criando os primeiros registrosPara melhor acompanhamento dos passos seguintes, você pode utilizar um cliente REST de sua preferência. Neste exemplo, vamos utilizar um curl para simplicidade.
Modelo para inserir dados no ElasticSearch:
$ curl -X PUT http://localhost:9200/produtos/biclicletas/1 -d '{
"modelo": "speed",
"nome": "Specialized Tarmac",
"marchas": 14,
"cor": "azul",
"tags": [
"bike",
"speed",
"specialized",
"tarmac",
"14 marchas"
],
"valor": 1500000
}'
O que fizemos foi o seguinte: no Index produtos no Type bicicletas, adicionamos uma bicicleta, e o id dela é 1. Caso você não forneça um Id para o documento do ElasticSearch, ele irá gerar um id para você.
Você terá a seguinte resposta do ElasticSearch:
{
"_index": "produtos",
"_type": "bicicletas",
"_id": "1",
"_version": 1,
"created": true,
"_source": {
"modelo": "speed",
"nome": "Specialized Tarmac",
"marchas": 14,
"cor": "azul",
"tags": [
"bike",
"speed",
"specialized",
"tarmac",
"14 marchas"
],
"valor": 1500000
}
}
Se você desejar buscar o registro acima, basta executar a seguinte requisição:
$ curl -XGET http://localhost:9200/produtos/biclicletas/1
Existem duas maneiras de realizar buscas no ElasticSearch. A mais simples é apenas utilizando query strings na URL da requisição. Utilizamos essa forma geralmente para pesquisas mais simples e rápidas.
A outra maneira, para queries mais complexas, é enviando um JSON com a Query DSL. Em geral, utilizamos essa opção quando queremos resultados mais refinados ou fazer agregações entre outras features do Elasticsearch.
Agora, vamos supor que você queira buscar por bicicletas azuis, utilizando Query String:
$ curl -XGET http://localhost:9200/produtos/biclicletas/_search/?q=cor:azul
Na query acima, enviamos o Field cor com a cor desejada – no caso, azul. Assim, a query seguinte irá procurar por todas as bicicletas que tenham a cor azul. O ElasticSearch irá retorna o seguinte resultado:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.30685282,
"hits": [
{
"_index": "produtos",
"_type": "bicicletas",
"_id": "1",
"_score": 0.30685282,
"_source": {
"modelo": "speed",
"nome": "Specialized Tarmac",
"marchas": 14,
"cor": "azul",
"tags": [
"bike",
"speed",
"specialized",
"tarmac",
"14 marchas"
],
"valor": 1500000
}
}
]
}
}
Para realizar a mesma busca utilizando Query DSL:
$ curl -X GET http://localhost:9200/produtos/bicicletas/ -d '{
"query": {
"match": {
"cor": "azul"
}
}
}'
Conclusão
Esta foi apenas uma introdução ao ElasticSearch, que ainda inclui features como geolocation, sugestão e analytics. Outro ponto interessante é que o ElasticSearch possui diversas libs para facilitar sua utilização em sua linguagem de programação favorita. Vale a pena visitar o site deles e conferir!
***
Texto publicado originalmente na Revista iMasters.






