ElasticSearch – Busca de alta performance

É um projeto OpenSource, desenvolvido em Java e baseado no Apache Lucene, para indexação e busca de alta performance. Sua API principal é toda RESTful, além de outras APIs de integração direta com o ElasticSearch para diversas linguaguens de programação, como: Java, Javascript, Groovy, .NET, PHP, Perl, Python e Ruby.

Elasticsearch is a real-time distributed search and analytics engine. It allows you to explore your data at a speed and at a scale never before possible. It is used for full-text search, structured search, analytics, and all three in combination

Principais recursos

  • RESTful
  • Schema less: Não necessita de schema
  • Busca textual
  • Busca geoespacial
  • Busca facetada
  • Tempo real de busca
  • Replicação: suporta replicação de index
  • Diversos plugins disponíveis

Conceitos básicos:

Em comparação com banco de dados relacionais, podemos fazer a seguinte relação:

  • Index: Database
  • Type: Tabela
  • Document: Registro / Linha
  • Field: Campo / Coluna

Instalação

Para instalar, basta fazer o download no site oficial (www.elasticsearch.org/download) e extrair o arquivo compactado e executar o “elasticsearch.bat”, para Windows ou “elasticsearch” para Linux ou OS X. É necessário ter no mínimo o Java 7 instalado.

Criando index e inserindo dados no ElasticSearch

Por padrão, o ElasticSearch sobe na porta 9200 para as chamadas REST e porta 9300 para as chamadas via API Java. Como exemplo, usarei essa mesma porta:

Para criar um index:

curl -XPUT 'localhost:9200/locadora'

Este comando cria um index chamado “locadora”, usando o verbo PUT do REST. Simple não?

A resposta desse curl será:

{
   "acknowledged":true
}

O retorno mostra que o comando foi executado com sucesso.

                Obs : Este passo pode ser pulado executando diretamente o comando abaixo de adição de index, pois caso ele não exista no ElasticSearch, ele irá criar automaticamente.

Caso queira ver os índices criados, execute essa chamada:

curl 'localhost:9200/_cat/indices?v'

Adicionando dados ao nosso index “locadora”:

curl -XPUT 'localhost:9200/locadora/filme/1' -d '
{
   "nome": "Titanic",
   "ano": "1997",
   "genero": [ "Romance", "Drama" ]
}'

Novamente temos um comando PUT, sendo a sintaxe <endereço>:<porta>/<index>/<type>/<id> -d <JSON>.

O retorno dessa chamada é:

{
   "_index":"locadora",
   "_type":"filme",
   "_id":"1",
   "_version":1,
   "created":true
}

Repare que tudo envolve JSON, tanto na passagem dos dados, quanto no retorno da chamada.

Fazendo busca por ID

curl -XGET 'localhost:9200/locadora/filme/1'

Aqui executamos uma chamada GET, passando <endereço>:<porta>/<index>/<type>/<id>

Retorno:

{
   "_index":"locadora",
   "_type":"filme",
   "_id":"1",
   "_version":4,
   "found":true,
   "_source":
     {
         "nome": "Titanic",
         "ano": 1997,
         "genero": [ "Romance", "Drama" ]
     }
}

Plugins

  • Marvel: É um plugin de gerenciamento dos clusters do ElasticSeach. Com ele é possível ver a quantidade de nodes, index, shards, dados utilizados, consumo da CPU, memória utilizada e outras infomações, tudo em um organizado dashboard. É grátis para desenvolvimento, porém pago para produção. Possui também o Marvel Sense, que provê um console que facilita em suas chamadas REST ao invés de ficar fazendo CURLs, possui auto-complete, resposta JSON tabulada, URL configurada, não precisando ficar escrevendo a cada chamada REST, entre outras funções. Mais informações em: https://www.elastic.co/products/marvel
  • Head: é um front-end web pra navegar e interagir com os clusters do ElasticSearch. Com ele é possível ver os registros de cada cluster, index, fazer consultas com retornos em formatos de grids. Mais informações em: http://mobz.github.io/elasticsearch-head/

Conclusão

ElasticSearch é uma ferramenta de fácil uso e instalação, para criar consultas inteligentes e de rápido processamento. Neste post mostrei apenas o básico da estrutura e seu funcionamento, porém é possível realizar consultas muito mais complexas, separar os índices em diversos shards para distribuir os dados, criar réplicas, entre outras coisas. Para mais informações e documentação, podem acessar: https://www.elastic.co/

Referências

Por IGOR KENGI SHIOHARA

Postado em: 18 de junho de 2015

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário