Primeiras aulas do curso Elasticsearch: executando buscas inteligentes

Elasticsearch: executando buscas inteligentes

Introdução ao Elasticsearch - Introdução

Eu sou o Marcelo Oliveira e vou ser o seu instrutor nesse curso Elasticsearch Parte 1. Tudo começa com o ser humano, que é um ser incompleto e por isso está sempre buscando algo. E nós estamos sempre à procura de dados, informações e de respostas. E muitos negócios e aplicações online também utilizam essa ideia da procura como a sua ferramenta fundamental.

Uma loja virtual, por exemplo, não seria nada sem o mecanismo de busca. O mesmo se aplica a aplicativo de filmes e séries. Até um gigante, como o Google, nasceu e cresceu para resolver o problema da busca.

Uma busca pode ser tão simples quanto uma caixa onde você digita um texto e os resultados aparecem ou então ela pode ser disfarçada em interfaces mais sofisticadas, como, por exemplo, você arrastar o dedo pelo mapa, na tela do seu smartphone, e fazer esse mapa mostrar detalhes, mostrar novos locais.

A busca também resolve tarefas triviais, como encontrar aquele restaurante ou pizzaria que você queria tanto conhecer. Ou então pode ser alguma coisa mais pesada, como visualizar e analisar erros que estão no meio de um bilhão de mensagens de log de erros de um sistema corporativo.

Tudo isso é a parte visível da busca, mas o que está por trás da busca? Com o passar do tempo, o volume cada vez maior de informações e dados estruturados começou a criar uma dor de cabeça para profissionais de TI. Então muitas vezes não é tão simples encontrar rapidamente informações relevantes no meio dessa montanha de dados, para isso surge o Elasticsearch.

Você pode não perceber, mas provavelmente você usa o Elasticsearch todos os dias. Quando você viaja para casa com aplicativo de táxi, o Elasticsearch está lá para encontrar um motorista mais próximo. Quando você vai procurar para fazer compras nas suas lojas virtuais o Elasticsearch também vai fornecer resultados e recomendações relevantes. E quando você encontrar a pessoa ideal no aplicativo de namoro, também está usando o Elasticsearch, muito provavelmente.

E o Elasticsearch é uma aplicação que roda em cima do Java e também trabalha com outro aplicativo chamado de Lucene, que é um software de busca que contém uma API para indexação de documentos, escritos também na linguagem Java.

Mas você não acessa o Elasticsearch através do Java, não necessariamente. Como você faz isso? Num banco de dados relacional é comum utilizarmos a linguagem SQL, que é a linguagem tradicional para bancos relacionais. Já no Elasticsearch você vai utilizar comandos chamados de HTTP REST. Esses comandos vão fazer as operações mais básicas de inserir, selecionar, buscar dados, atualizar e também excluir informações do seu banco de dados Elasticsearch.

Nós vamos ver também como funcionam os conceitos por trás do Elasticsearch, os índices, os tipos, os shards e as réplicas. Nós vamos ver como que esses conceitos equivalem num mundo relacional. Cada um desses termos vai ter uma correspondência no Elasticsearch.

Vamos ver também como fazer as operações mais básicas de leitura e escrita através do Elasticsearch, fazendo também um paralelo com o banco relacional e vamos ver também o conceito de shards, que são os fragmentos usados para quebrar um banco de dados Elasticsearch em pedaços menores, para facilitar a sua utilização.

Vamos ver também o conceito de busca. Vamos começar com as buscas mais simples, como, por exemplo, procurar uma palavra futebol. E para isso nós vamos ver uma ferramenta fantástica para visualização do Elasticsearch, que é o Kibana. O Kibana vai permitir que nós façamos essas consultas através do console. Então vamos trabalhar com os métodos REST, como nós estamos vendo aqui, para fazer as consultas rapidamente no Kibana e retornar os dados.

Vamos ver também como o Elasticsearch faz para mapear os dados. Então conforme você vai inserindo documentos, automaticamente ele vai mapeando os tipos para você, sem necessidade de você criar, por exemplo, estrutura de tabelas, como seria num banco SQL relacional.

E nós vamos ver também como obter o mapeamento que foi criado no Elasticsearch e também vamos aprender a criar o nosso próprio mapeamento manualmente. Então vamos ver também que existem vários tipos que podem ser utilizados no mapeamento de dados do Elasticsearch, e no final dessa primeira parte nós vamos ver como trabalhar para quebrar os textos dos documentos do Elasticsearch em analisadores. Com esses analisadores nós vamos conseguir gerar o que é chamado de índice invertido.

Nós estamos vendo aqui uma foto de uma página de um índice remissivo, que você encontra no final de um livro técnico qualquer, que vai remeter você às páginas onde se encontram cada um dos termos que você busca. Então, da mesma forma, o Elasticsearch trabalha com o chamado índice invertido, que mapeia os termos encontrados nos documentos para cada um dos documentos que fazem referência a esse termo.

Eu espero que você goste bastante dessa primeira parte aqui do curso do Elasticsearch. Muito obrigado.

Introdução ao Elasticsearch - Como Funciona o Elasticsearch

Eu sou Marcelo Oliveira, seja bem-vindo ao nosso novo curso, Elasticsearch: Pesquisando e Analisando Seus Dados. Na atividade anterior nós explicamos o que vamos utilizar nesse curso e também fornecemos os links para instalação tanto do Elasticsearch quanto do Kibana. E agora vamos falar um pouco sobre como funciona o Elasticsearch.

O Elasticsearch é uma aplicação escrita em Java sobre o Lucene, que é um software de busca e também uma API de indexação de documentos, que foi escrito também na linguagem Java.

No início nós vamos montar um ambiente de desenvolvimento que é simples, com apenas um processo rodando em apenas uma máquina, que é a nossa máquina. Mas, para o final do curso nós vamos ver um pouco sobre como o Elasticsearch trabalha em larga escala. Mas, por enquanto, vamos rodar o Elasticsearch localmente.

Aqui podemos ver um diagrama que mostra qual é a relação entre o Elasticsearch e o Lucene, que é o motor da busca, que funciona internamente. Nós podemos ver neste outro diagrama que sempre que você chama alguns comandos do Elasticsearch, ele, por sua vez, vai executar os comandos em outra camada nesse software aqui, que é o Lucene.

E qual a diferença entre um e o outro? A diferença é que o Lucene é o motor de busca interno do Elasticsearch, só que ele está limitado a trabalhar em uma máquina, você consegue trabalhar com o banco de dados em apenas uma máquina e você não consegue a escalabilidade. Então para você ter escala você precisa utilizar o Elasticsearch.

Cada plataforma, seja ela Windows, Mac OS ou Linux, tem o seu próprio arquivo de inicialização, basta você chamar o arquivo correspondente na sua plataforma e ele vai iniciar o Elasticsearch. No nosso caso, a plataforma Windows utiliza o arquivo elasticsearch.bat, e ao rodar o Elasticsearch vai se associar à porta 9200.

Nós vamos executar agora o comando na pasta bin da minha instalação do Elasticsearch. Temos aqui o arquivo elasticsearch.bat, então se você estiver no Linux ou no Mac OS você vai ter os arquivos correspondentes a essas plataformas. Ele vai começar a subir o processo para poder rodar o Elasticsearch. E agora nós temos o Elasticsearch rodando aqui.

Agora nós temos duas portas que estão associadas ao Elasticsearch, que são a porta 9200, que fornece um web service REST para que ele seja acessado pelos clientes, e outra porta, a 9300, que serve como comunicação entre os nós, os chamados no nodes.

Depois dessa inicialização nós podemos agora acessar o endereço localhost 9200. Vamos abrir o Chrome e aqui eu vou acessar a porta 9200, “localhost:9200”. E agora temos aqui rodando o Elasticsearch. Nós temos aqui um conteúdo que foi retornado nessa página, que é um conteúdo JSON.

O que esse conteúdo está dizendo para mim? Ele está dando o nome da máquina, que é Estúdio Preto e está fornecendo uma série de informações sobre essa instância do Elasticsearch. E nós vamos poder, a partir de agora, interagir com o Elasticsearch sem nenhum problema.

E agora nós vamos falar um pouco sobre o acesso ao Elasticsearch. O acesso que significa ler, criar, modificar e também excluir dados do Elasticsearch.

Mas primeiro vamos fazer uma comparação entre um banco relacional, um banco tradicional como SQL Server, MySQL, Oracle, e um banco Elasticsearch. Qual a diferença entre eles com relação ao acesso? Pensando no banco relacional, como nós podemos inserir ou atualizar esse banco relacional? Vamos utilizar uma linguagem SQL, ou seja, vamos fazer o INSERT ou UPDATE. Também podemos fazer o SELECT, o DELETE, que são comandos SQL.

Mas no Elasticsearch isso não acontece, como nós podemos fazer para inserir e atualizar dados no Elastic? Nós vamos ter que trabalhar com os comandos HTTP REST, para podermos acessar a API do Elastic.

E pensando em HTTP REST, a maneira como nós interagimos significa que nós precisamos utilizar o protocolo HTTP para acessar as APIs do Elastic. Então se você quer criar documentos ou realizar buscas, você vai usar os verbos HTTP para acessar essas funcionalidades. Mas que raio é isso de verbos HTTP? Vamos dar uma olhada nesse desenho.

Nós temos esse motorzinho aqui, que é a API REST, a API do Elastic que está pronta para receber comandos. Então para acessar o Elastic de forma completa, nós precisamos de um cliente HTTP.

O que seria um cliente HTTP? Normalmente nós utilizamos o navegador para fazer um acesso HTTP. O browser, o Chrome, o IE, o Firefox, todos eles são clientes HTTP, porém eles são limitados a alguns verbos HTTP, por exemplo, os verbos são o GET e o POST, sendo que o POST serve para gravar dados na rede. Quando você envia um formulário, você está fazendo um comando POST. E quando você vai obter dados, você vai utilizar um verbo HTTP GET. E você também pode utilizar outros, como o PUT e também o DELETE.

E qual a diferença entre eles? Como nós podemos comparar, esses verbos HTTP com os comandos da linguagem SQL, que são utilizadas para acessar um banco relacional? No lugar do POST você utilizaria, no banco relacional, um comando INSERT, para inserir dados. Sempre que eu faço o POST eu estou inserindo documentos no Elasticsearch.

Já para você obter dados com GET, no caso do banco relacional, você acessaria através de um comando SELECT do SQL. Agora, o verbo PUT equivale a um UPDATE, ou seja, equivale a atualizar algum dado do banco de dados, ou então inserir, só que fazer um insert sem duplicação, ou seja, se você fizer um PUT várias vezes, esse documento não é duplicado, ele vai sempre inserir o mesmo documento. E o último comando é o mais óbvio, que é o DELETE, para excluir documentos.

Normalmente, para fazermos esse acesso HTTP mais completo, nós precisamos utilizar um utilitário HTTP, como, por exemplo, o Postman, ou outra ferramenta de linha de comando chamada de cURL, para fazer essa transferência de dados utilizando HTTP.

Nesse curso, porém, nós vamos utilizar o Kibana, que é uma ferramenta de administração e pesquisa do Elasticsearch na web, que tem uma interface gráfica bastante rica e que foi criada utilizando o servidor NodeJS.

Com o Kibana você pode realizar tarefas administrativas do Elasticsearch, você também pode descobrir informações sobre um nó, sobre um cluster. Nós vamos ver cluster mais para frente. Você pode descobrir problemas de consumo de memória, você pode acessar o coletor de lixo do Elasticsearch para ver se está tudo em ordem e a parte mais interessante para nós no momento, que é o console.

O Kibana fornece um console que é um client rest que nos permite interagir com o Elasticsearch de forma completa.

Para acessar o Kibana nós vamos digitar na barra de endereços o endereço localhost:5601. Vou colocar numa nova aba, “localhost:5601”. E isso vai nos fazer abrir essa aplicação super bonita, super simpática que é o Kibana. Que nada mais é do que uma janela para o Elasticsearch.

Nós vamos ver na sequência como trabalhar com essa ferramenta para podermos prosseguir no curso.

Introdução ao Elasticsearch - O Comando HTTP Post

Nós vamos começar a trabalhar com o Kibana, que é uma janela para o Elasticsearch, tanto para gerenciar como também para manipular dados do Elastic. Se você fez tudo certo na atividade de instalação, você já baixou o Elasticsearch e você também baixou o Kibana. E nós temos duas pastas, uma para o Elasticsearch, outra para o Kibana, vamos ver essas pastas então.

Eu tenho aqui, do lado esquerdo, a pasta elasticsearch-7.4.2, dentro dela eu tenho uma pasta bin. E aqui eu vou rodar esse arquivo de lote, elasticsearch.bat. E do outro lado eu vou ter a pasta que eu baixei também, que é o kibana-7.4.2, dentro dela também tem uma pasta bin, e vou rodar aqui o executável kibana.bat. Então cada um desses arquivos de lote vai rodar a sua respectiva aplicação.

Agora, na esquerda, eu tenho o console rodando a aplicação Elasticsearch, como nós podemos ver, e aqui do lado direito eu tenho o console rodando a aplicação Kibana, que está sendo executada no endereço localhost porta 5601. Agora eu já posso acessar o Kibana. Vamos ver então a aplicação Kibana rodando em localhost porta 5601.

E para o Kibana poder acessar a API do Elasticsearch, eu preciso acessar um certo menu aqui nesses ícones da esquerda, que eu estou vendo aqui no Kibana. Eu vou expandir a partir desse ícone e aqui eu tenho uma opção que é o Dev Tools. Quando eu clico em Dev Tools ele vai abrir para mim o console, Welcome to Console. Com o console eu consigo executar os comandos HTTP REST do Elasticsearch.

O que nós vamos fazer aqui? Nós temos no console um comando de exemplo. Eu tenho aqui o GET e eu tenho do lado um parâmetro search. O search que significa busca, então nós vamos executar esse comando do jeito que está aqui.

Aqui eu posso ver uma seta para a direita, indicando que eu posso executar esse comando GET search. Vou clicar para executar e aqui ele executou no Elasticsearch, porque o meu Kibana está conectado diretamente à minha instância do Elasticsearch, e aqui eu tenho o documento JSON com os resultados da busca.

O que essa busca está fazendo aqui? O GET search vai fazer uma consulta aos dados do meu índice. O índice que, na verdade, é o banco de dados do Elasticsearch. Não confundir com o índice de tabela, o índice de coluna de um banco relacional. Quando falarmos de índice, vamos estar falando de um banco de dados do Elasticsearch.

Voltando na nossa apresentação, nós vamos começar a ver os comandos que vamos utilizar aqui. Nós vamos agora para o método HTTP POST, que serve para inserir dados no Elasticsearch. Para podermos fazer uma inserção, vamos criar um problema aqui para podermos resolver.

O problema é cadastrar uma pessoa em um banco de dados chamado catálogo. Então quando eu falo banco de dados, novamente, no Elasticsearch significa índice, então eu vou ter que inserir no índice do Elasticsearch um documento. Quando eu falo documento, na verdade, eu estou falando de algo que parece um registro de um banco de dados relacional. Então o que você vê como linha, tupla ou registro no relacional, aqui nós vamos tratar como documento.

E a tabela que nós vamos acessar é uma tabela de pessoas. Então, novamente, eu vou ter o banco de dados, que vai se chamar catálogo, que vai ser o meu índice. Então eu tenho o índice catálogo e a tabela de pessoas. Dentro da tabela de pessoas eu vou então cadastrar uma pessoa, através do comando HTTP POST.

Nós vamos ver aqui como é a sintaxe de um comando POST. A sintaxe é POST, em seguida vai vir o nome do índice, que vai ser, no nosso caso, catálogo, e depois do barra eu vou ter o nome da tabela. Porém no Elasticsearch, a partir da versão 7, nós não trabalhamos com nomes de tabelas, nós vamos utilizar somente esse tipo fixo, que é o _doc. É como se você tivesse uma tabela para documentos de vários tipos.

Como é essa sintaxe? Vamos detalhar um pouco mais. Quando nós fazemos uma inserção com o POST, além de passar o índice e o _doc, eu também tenho que passar um conteúdo do documento em formato JSON com os dados do meu documento, que seria, no banco relacional, os dados de um registro, de uma linha ou de uma tupla.

Além do comando POST eu tenho que passar o corpo da requisição, que é obrigatório, você nunca vai chamar o post sem passar um corpo com uma requisição JSON. E depois nós temos aqui um exemplo de um documento JSON, onde nós vamos inserir o registro de um cara chamado João Silva. E aqui nós temos também os dados dele, os atributos à esquerda e à direita os valores dos atributos.

Depois do POST nós temos o nome do índice, que eu vou chamar de catalogo, e depois, onde seria o nome da tabela, que antes da versão 7 aqui eu colocaria pessoas, que é o nome do tipo, então eu poderia ter um tipo para cada tipo de documento. Esse type aqui eu não uso mais a partir da versão 7, eu passo a utilizar então o nome fixo _doc.

Agora nós estamos tendo aqui em amarelo os nomes dos atributos, que seriam no banco relacional os nomes de colunas. E do lado direito o que seriam os valores das colunas, os valores que estão sendo inseridos nas colunas de uma tabela de um banco relacional.

Aqui nós podemos armazenar os valores desse documento como o tipo string, como nós estamos vendo aqui. Além disso também é possível ter outros tipos primitivos, como, por exemplo, um valor nulo, valor booleano, um valor byte, valores inteiros, valores de ponto flutuante, palavras-chaves, texto, como nós estamos vendo aqui, o que estamos vendo como string, na verdade, é um tipo texto.

Nós também podemos ter valores binários, valores data e hora, podemos ter também um tipo que é o IP de um computador, por exemplo, e tipos mais complexos, como é o caso que estamos vendo aqui, que são os arrays. Temos aqui um array futebol, música e literatura, que são interesses do João Silva. Mas note que para termos um array, todos os tipos têm que ser compatíveis, se você tem um array ou você tem todos os valores como texto, ou todos como binários, ou todos como inteiros e assim por diante.

E agora nós vamos executar esse comando no Kibana, para podermos inserir os dados do João Silva no Elasticsearch. E para fazer isso o que nós vamos precisar abrir agora é outra pasta, que você também já deve ter baixado, uma pasta do nosso projeto que tem alguns arquivos. Esses arquivos são capitulo1.txt, capitulo2.txt, até o último capítulo.

Vamos abrir o arquivo capitulo1.txt e nós vamos ter aqui vários comandos que nós vamos executar ao longo do curso. Vamos pegar o primeiro, que é o POST catalogo/_doc/, vamos selecionar somente até esse fechamento de chave aqui. Vamos copiar e agora vamos colar no console do Kibana. E com esse botão verde, vamos executar esse comando e agora o Kibana deu a resposta.

Na verdade, essa resposta não é do Kibana, essa resposta é do Elasticsearch, o Kibana é só um veículo, é um cliente HTTP para o Elasticsearch.

Temos aqui como resposta também um documento JSON. Nós temos aqui várias informações com relação ao resultado da nossa inserção. E o mais importante aqui que podemos ver é que essa inserção foi bem sucedida. Aqui nós temos successful : 1, indicando que foi bem sucedido esse comando POST e aqui o resultado, created, que significa que o documento foi criado no Elasticsearch. Então nós vamos continuar, a partir de agora, fazendo outros comandos também através do Kibana.

Sobre o curso Elasticsearch: executando buscas inteligentes

O curso Elasticsearch: executando buscas inteligentes possui 173 minutos de vídeos, em um total de 51 atividades. Gostou? Conheça nossos outros cursos de NoSQL em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda NoSQL acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas