Elasticsearch supre pelo menos duas dentre as necessidades mais comuns em sistemas de busca, sendo uma delas trazer os dados no menor tempo possível, quase em tempo real ou near real time, bem como compreender, com uma certa inteligência, qual foi o termo buscado.

Falando do que há por trás dessa tecnologia, o Elasticsearch não é um banco de dados não relacional, mas contém um. Além disso ele também consiste de um motor de busca de alto desempenho e uma API RESTful, através da qual podemos nos comunicar com o motor de busca via protocolo HTTP.

Ao decidir por trabalhar com o Elasticsearch você vai precisar migrar os seus dados para essa ferramenta de alguma forma. Isso pode ser feito a partir da API RESTful do Elasticsearch ou por uma das suas ferramentas de importação, tais como o Logstash ou o Kibana. No contexto de um banco não relacional, trabalhar com o Elasticsearch é facilitado e ao importar o primeiro documento o mesmo será automaticamente adicionado em um índice e, após esse passo, já poderá ser acessado pela API RESTful ou por código.

No que tange a integração com sistemas, o Elasticsearch é bem flexível porque podemos tanto utilizar a sua API RESTful para comunicação, que por definição da arquitetura REST é agnóstica no que se refere a linguagens de programação, ou ainda usar uma biblioteca de conexão, programando as consultas com ela no código da aplicação. Atualmente o Elasticsearch possui bibliotecas para as mais diversas linguagens de programação, tais como Java, Python, PHP, JavaScript e Node.js. No projeto que acompanha a série da qual esse DevCast faz parte, uma vez que ele foi implementado em Node.js, usamos a biblioteca elasticsearch.js, em sua versão 15.2.0.

Assim como seu modelo de armazenamento de dados, a estrutura de queries do Elasticsearch consiste de um JSON, sendo assim familiar ao desenvolvedor web/JavaScript:

{
  "query": {
    "match_all":{}
  }
}

Pra quem já teve contato com bancos relacionais, essa consulta seria equivalente a disparar o comando SELECT * FROM para o SGBD.

No exemplo de consulta acima listamos todos os campos presentes em um documento, mas se desejamos especificar quais dentre eles devem ser retornados podemos incluir uma lista em _source da seguinte forma:

{
  "_source": ["title", "overview"],
  "query": {
    "match_all": {}
  }
}

Desta vez, em lugar da lista completa de campos serão retornados aqueles de nome title e overview.

Apesar desse modelo de consulta possuir operadores novos, principalmente para quem ainda não trabalhou com bancos não relacionais, podemos notar no exemplo acima que as consultas criadas para o Elasticsearch são consistente e intuitivas. Aos poucos, ganhando familiaridade com essa forma de escrever consultas veremos que ela é também extremamente flexível e poderosa, dispondo ainda da possibilidade de executar scripts dentro das buscas e muitos outros recursos.

No curso que acompanha essa série você aprenderá o fundamental para realizar consultas com o Elasticsearch. Clique no link abaixo :)

Saiba mais Veja a Série Buscas semânticas com Elasticsearch"