Fala, pessoal! Tudo certo?

Quero trazer nessa postagem um pouco da ferramenta Elasticsearch, que em resumo, é um banco de dados de documentos.

Eu estudei a ferramenta nesses últimos dias e achei incrível a facilidade de instalação e uso.

Também achei muito legal o recurso de buscas de documentos que é incrivelmente rápido!

Além disso, a ferramenta funciona com uma Rest API, o que facilita muito a integração com outros sistemas.

Outro recurso legal é a utilização de plug-ins dentro do Elasticsearch, uma aplicação bem famosa que originou-se de um plug-in do Elasticsearch é o Kibana, que também veremos por aqui. 🙂

Nessa postagem irei abordar:

  • Paralelo entre o modelo relacional e o Elasticsearch
  • Instalação do Elasticsearch
  • Instalação do Kibana
  • Criando o primeiro index
  • Criando o primeiro document
  • Realizando a primeira pesquisa

Sem mais delongas, mãos à obra!

Fazendo um paralelo com os bancos relacionais

Abaixo temos uma tabela que tenta relacionar os conceitos do Elasticsearch com conceitos dos bancos relacionais.

RelacionalElasticsearch
Bancos Index
TabelaType (Nas versões do Elasticsearch acima de 6
todos types são genéricos
acessados através do comando _doc)
EsquemaMapping
TuplaDocument
ColunaAttribute

Também temos as operações básicas de CRUD (create, retrieve, update e delete), mas elas funcionam com os verbos do mundo HTTP, visto que o Elasticsearch funciona com Rest API.

RelacionalElasticsearch
INSERTPOST
SELECTGET
UPDADEPUT
(UPDADE OU INSERT SEM DUPLICAR)
DELETEDELETE

Apos fazermos esse paralelo com o mundo relacional, vamos à instalação. 🙂

Instalação do Elasticsearch

Primeiro devemos baixar o arquivo para nossa maquina, segundo o sistema operacional, no meu caso é o Linux.

Aqui você encontra o link para download: https://www.elastic.co/pt/downloads/elasticsearch

Uma vez baixado, devemos descompactar o conteúdo. No caso do meu sistema o comando é:

tar -xvf elasticsearch-7.12.1-linux-x86_64.tar.gz

Ao descompactar, termos dentro da pasta a seguinte estrutura de diretorios:

Dentro da pasta bin temos o executáveis para cada sistema.

Para linux e Mac OS X o arquivo é elasticsearch, no Windows o arquivo é elasticsearch.bat

Feito isso, está pronto!

OBS: Antes de iniciarmos o programa, devemos nos certificar que as portas 9200 e 9300 estejam livres, pois a aplicação utiliza essas portas.

Para executar o programa, devemos executar o binário:

./elasticsearch

Depois de iniciar o elasticsearch, você pode acessar o endereço http://localhost:9200 e ver ele funcionando!

Com isso já temos o Elasticsearch funcionando!

Instalando o Kibana

Primeiro devemos baixar o arquivo segundo o sistema operacional:

Link de download: https://www.elastic.co/pt/downloads/kibana

Depois de baixar, devemos descompactar o arquivo.

tar -xvf kibana-7.12.1-linux-x86_64.tar.gz

Temos praticamente os passos do Elasticsearch, executando o binário da pasta bin.

./kibana

OBS: Antes de executar o Kibana, tenha certeza que o Elasticsearch está funcionando e também que a porta 5601 esteja livre.

Depois disso poderemos acessar via navegador o endereço: http://localhost:5601

E pronto! O Kibana está instalado. 😀

Criando o primeiro índice

Para a criação do nosso primeiro índice, iremos utilizar o Kibana develop tool kit, dentro do proprio Kibana. Isso nos provê uma interface amigável para colocarmos os comandos HTTTP Rest.

No Kibana, então acesse Management > Dev Tools. O console abaixo deverá ser mostrado.

Para criarmos nosso primeiro índice, faremos o comando PUT com o nome do índice. E no corpo da requisição, colocaremos as configurações.

PUT /meu-primeiro-index
{
   "settings": {
     "index": {
       "number_of_shards": 3,  
       "number_of_replicas": 0
    }
  }
}

O nome do índice criado será meu-primeiro-index, como configuração teremos o numero padrão de shards (explicarei melhor em uma outra postagem o que são shards, mas você pode fazer um paralelo com as partições do mundo relacional), que são 3 e o numero de replicas como 0, isso por que estamos em um ambiente local e só temos uma maquina. Em um ambiente de cluster é boa pratica não deixar todos os dados em um só local.

Explicadas as configurações, podemos executar o comando no botão de “play” ao lado de onde está nosso comando PUT.

Quando fazermos isso, além do programa nos devolver o status 200 – OK, ele também nos devolve um corpo de resposta, informando que nosso índice foi criado e que ele entendeu que queríamos criar shards, colocando como true no corpo de resposta.

Um ponto importante aqui, por hora utilizarei o Kibana apenas para “conversar” com o Elasticsearch. Em um outro momento, trarei a parte de dashboads e analise com essa ferramenta.

Como são comandos HTTP Rest, eu poderia faze-los via wget ou curl, mas a interface do Kibana deixa tudo mais amigável.

Criando o primeiro Document

Para criamos o nosso primeiro documento, utilizaremos o comando POST lá dentro do Kibana. Extrai alguns dados do adorocinema para utilizar de exemplo. Abaixo os dados que iremos inserir:

POST meu-primeiro-index/_doc/
 {
   "titulo" : "O Poderoso Chefão",
   "direcao" : "Francis Ford Coppola",
   "roteiro" : ["Francis Ford Coppola","Mario Puzo"],
   "elenco" : ["Marlon Brando", "Al Pacino", "James Caan"],
   "nota" : 4.8,
   "avaliacoes" : 6112,
   "link_adorocinema" : "https://www.adorocinema.com/filmes/filme-1628/"
 }

E da mesma forma, obtemos um corpo de resposta:

E nosso primeiro documento foi enviado com sucesso, podemos ver isso no atributo result do corpo de resposta:

{
   "_index" : "meu-primeiro-index",
   "_type" : "_doc",
   "_id" : "f5vHankBbg2kxGsLxfOR",
   "_version" : 1,
   "result" : "created",
   "_shards" : {
     "total" : 1,
     "successful" : 1,
     "failed" : 0
   },
   "_seq_no" : 0,
   "_primary_term" : 1
 }

É interessante de observar é que o próprio Elasticsearch criou um ID para nosso documento (f5vHankBbg2kxGsLxfOR), se tentarmos inserir novamente ele irá criar um novo documento, veremos em outra postagem como resolver isso.

Outro ponto é que não criamos nenhuma estrutura para receber os dados, o Elasticsearch inferiu os tipos de dados e a estrutura.

Isso é bem legal, mas traz alguns problemas que veremos em um outro post, pois nesse vou me concentrar em apresentar a ferramenta.

Realizando a primeira pesquisa

Para realizar a primeira pesquisa, utilizaremos o método GET. Abaixo o comando correspondente:

GET meu-primeiro-index/_search
 {
   "query": { 
     "bool": { 
       "must": [
         {"match": { "titulo": "O Poderoso Chefão"}}
       ]
     }
   }
 }

Quando fazemos a execução temos o resultado no corpo de resposta:

Dentro do atributo “hits” temos o atributo “value” com o valor de 1, que é a quantidade de resultados que a busca trouxe.

Um ponto legal de observar é que ele traz um score de relevância para aquela busca, no campo “max_score”, pois poderíamos ter outros filmes, como as sequencias, por exemplo.

{
   "took" : 12,
   "timed_out" : false,
   "_shards" : {
     "total" : 3,
     "successful" : 3,
     "skipped" : 0,
     "failed" : 0
   },
   "hits" : {
     "total" : {
       "value" : 1,
       "relation" : "eq"
     },
     "max_score" : 0.8630463,
     "hits" : [
       {
         "_index" : "meu-primeiro-index",
         "_type" : "_doc",
         "_id" : "f5vHankBbg2kxGsLxfOR",
         "_score" : 0.8630463,
         "_source" : {
           "titulo" : "O Poderoso Chefão",
           "direcao" : "Francis Ford Coppola",
           "roteiro" : [
             "Francis Ford Coppola",
             "Mario Puzo"
           ],
           "elenco" : [
             "Marlon Brando",
             "Al Pacino",
             "James Caan"
           ],
           "nota" : 4.8,
           "avaliacoes" : 6112,
           "link_adorocinema" : "https://www.adorocinema.com/filmes/filme-1628/"
         }
       }
     ]
   }
 }

Conclusão

O Elasticsearch é uma ótima ferramenta! Muito fácil de instalar, configurar e utilizar.

Esse é um ótimo motor de buscas que você pode implementar em suas soluções, integrando facilmente ao seu sistema atual via API Rest.

Como essa é uma postagem básica, existem alguns pontos que precisam ser cobertos para que não haja erros na utilização. Como por exemplo:

  • Criação do mapping (sem inferência do Elasticsearch)
  • Analyzers (O que são e como interferem na busca)
  • Id do index (Criando nosso próprio índice, e entendendo o controle de versão)
  • bulk (inserindo dados de forma massiva)

Vou abordar esses aspectos na próxima postagem!

Até mais! 😀

Categorias: NoSQL

Jefferson Soares

Olá! Sou Jefferson. Trabalho com: Dados, Dashboards, SQL, SAS, Python e muito mais! Criei esse cantinho para postar alguns conhecimentos. :)

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments