Por que eu devo ler este artigo:Esse artigo é útil para estudantes e profissionais que tenham alguma experiência em Java e queiram dar os primeiros passos no desenvolvimento para Elasticsearch.

O artigo apresenta uma visão geral dos conceitos de mineração de texto, um resumo das ideias básicas contidas no framework, os primeiros passos para o desenvolvimento neste segmento e a criação de buscas avançadas.

Ao final, as ferramentas de filtros, agregações e sugestões também serão apresentadas, a fim de melhorar o resultado das pesquisas.

Big Data é um termo que engloba uma larga quantidade de conceitos, técnicas e ferramentas, e cujo foco é gerenciar grandes quantidades de dados. Visto como um novo paradigma computacional, o Big Data promete capturar, armazenar, analisar e compartilhar dados da ordem de petabytes gerados por aplicações nos mais distintos domínios.

Frequentemente associado ao Big Data, o objetivo do Elasticsearch é apoiar o desenvolvimento de aplicações centradas em texto, como redes sociais, sistemas de e-commerce, sites de notícias e canais de educação.

A grande vantagem do ES reside na sua arquitetura, projetada para ser escalável e para gerenciar grandes quantidades de dados de forma simples e eficiente.

A primeira versão foi lançada em 2010, pelo israelense Shay Banon. Desde então, muitas versões foram liberadas e empresas do calibre da Wikipedia, GitHub, Foursquare e Globo.com passaram a utilizar o framework.

O código do ES é desenvolvido em Java e está baseado principalmente em dois frameworks da Fundação Apache: o Lucene e o Hadoop.

O Lucene é utilizado como o motor de indexação e buscas em documentos desestruturados, e grande parte dos conceitos de programação deste é igualmente aplicável ao ES.

O Hadoop, por sua vez, é utilizado para escalar o sistema fazendo uso de jobs Map e Reduce, um modelo de programação paralela introduzido pelo Google. Como um dos seus diferenciais, o Elasticsearch possibilita que mesmo clientes não Java utilizem suas funcionalidades, via REST e JSON.

Com base nisso, este artigo tem como objetivo apresentar os conceitos básicos do ES e discutir sua API Java. Por motivos didáticos, o ES será apresentado através de uma comparação com um banco de dados relacional (ou BDR).

Sendo assim, serão analisados a partir de agora: os conceitos básicos e a arquitetura do ES; a instalação, a inserção e a busca de documentos utilizando comandos REST; e, finalmente, a API Java desta solução.

Conceitos básicos

O ES é uma ferramenta distribuída para mineração e tratamento de textos. Sua função principal é permitir que documentos desestruturados fossem armazenados e recuperados de forma simples e eficiente. A arquitetura do ES, que foi projetada para sempre trabalhar em cluster, suporta grandes quantidades de dados.

Elasticsearch é, de forma geral, uma versão distribuída do Lucene – framework para mineração e tratamento de texto desenvolvido pela Fundação Apache. Isto porque cada nó de um cluster ES contém tal framework para o gerenciamento das informações armazenadas.

Devido a essa relação, alguns dos conceitos básicos de ES são derivados do Lucene, a saber:

  • Índice: define o endereço para acesso às informações guardadas no ES. De forma parecida com o esquema nos BDRs, necessitamos saber o nome e a localização na rede de um índice (por exemplo, localhost:9200/nome_indice) para conectar-se e manipular as estruturas de armazenamento do ES;
  • Type: recurso usado para nomear conjuntos de documentos armazenados em um índice, podendo ser comparado ao conceito de tabela em BDRs, pois contém vários documentos que obedecem a uma mesma estrutura de campos;
  • Documento: é um texto plano – isto é, não corresponde a formatos binários como .doc ou .pdf – organizado em campos delimitados por chaves e vírgulas, de acordo com o padrão JSON. Sua função é similar ao das linhas de tabelas, já que é sobre os documentos que as operações de manuseio de dados (inserção, recuperação, alteração e exclusão) são realizadas;
  • Campo (field): é a unidade mínima de informação armazenada em um documento. Deve possuir um tipo, que pode ser padrão – por exemplo: string, integer/long, float/double, boolean, ou null – ou criado pelo desenvolvedor. O campo tem a mesma função de uma coluna no BDR;
  • Mapeamento (mapping): define a estrutura de um documento, contendo campos e a maneira como cada um deve ser armazenado e recuperado. O mapeamento funciona como a definição de colunas nas tabelas em BDRs;
  • Query DSL: é a linguagem de busca (para mais detalhes, veja a seção Links). Está para o Lucene como o SQL está para os BDRs;
  • Score: valor numérico que representa quão bem um documento está relacionado a uma busca em Query DSL;
  • Analisador: mecanismo para transformação de texto – por exemplo: a conversão de letras maiúsculas em minúsculas, o tratamento de espaços em branco – durante o armazenamento e recuperação de informações.

Para facilitar o entendimento, a Tabela 1 sumariza o relacionamento entre os conceitos do Lucene e os conceitos de BDRs apresentados nesta seção.

Lucene Banco de dados relacional (BDR)
Índice (Index) Esquema
Type Tabela
Documento (JSON) Linha
Campo (Field) Coluna
Mapeamento (Mapping) Estrutura da tabela
Query DSL SQL
Tabela 1. Mapeamento entre conceitos de bancos de dados relacionais e ES

Outros conceitos, igualmente importantes, foram adicionados pelo ES para estender o Lucene e permitir sua execução em cluster. Dentre eles, os principais são:

  • Nó: um servidor – virtual ou físico – que contém certo número de shards e réplicas;
  • Shard: um índice do Lucene que gerencia as informações armazenadas em um nó;
  • Réplica: também um índice Lucene, porém gerenciado pelo ES como uma cópia completa de algum dos outros shards do cluster. A réplica contém os mesmos dados e é responsável pelas mesmas funções de um shard.

Ela pode ser utilizada em dois casos: para melhorar o desempenho das buscas e para garantir a disponibilidade do cluster. O primeiro caso permite que haja um balanceamento de carga entre os shards do ES, diminuindo o tempo de resposta, já que o processamento das buscas será dividido entre os shards e suas réplicas.

O segundo caso possibilita q ...

Quer ler esse conteúdo completo? Seja um assinante e descubra as vantagens.
  • 473 Cursos
  • 10K Artigos
  • 100 DevCasts
  • 30 Projetos
  • 80 Guias
Tenha acesso completo