Utilizando Elasticsearch com PHP

Elasticsearch com PHP

Elasticsearch é uma ferramenta de busca e análise de dados em tempo real, de código aberto (open source), projetada para escalabilidade horizontal, confiável e de fácil gerenciamento. Combinando velocidade de pesquisa e poder de análise, através de uma linguagem sofisticada de consulta e amigável para o desenvolvedor.

Há algumas maneiras que você pode usar Elasticsearch com PHP, usando Curl, usando o cliente oficial ou ainda pacotes desenvolvidos pela comunidade que facilita a integração com alguns frameworks.

Neste artigo vamos ver um pouco sobre algumas características do Elasticsearch, como é feita a instalação do mesmo em sua máquina local e como usamos com o cliente oficial para PHP.

Principais Características do Elasticsearch

  • Pesquisa e análise em tempo real
  • Distribuído, escalável e alta disponibilidade
  • Multitenancy – Múltiplos clientes
  • Full-Text Search – Pesquisa de texto completo
  • Orientado a documentos
  • Schema-Free – Detecta automaticamente estrutura de dados
  • API RESTful – Amigável para o desenvolvedor
  • Segurança de dados, logs de transação
  • Disponível sob Apache 2 Open Source License
  • Construído em cima do Apache Lucene

Comparativo de terminologias  

Abaixo temos um comparativo de algumas terminologias que vamos ver neste artigo, para facilitar a compreensão:

Elasticsearch MySQL
Index Database
Type Table
Document Row
Field Column
Mapping Schema
Shard Partition

Instalando Elasticsearch em sua máquina

A instalação do Elasticsearch pode ser feita facilmente seguindo os seguintes passos:

  1. Faz o download em https://www.elastic.co/downloads/elasticsearch, descompacta o zip.
  2. Execute bin/elasticsearch em Unix ou  bin/elasticsearch.bat no Windows.
  3. Teste executando:
$ curl -i -XGET 'localhost:9200/'

Ou utilizando alguma ferramenta de sua preferência, para teste de API RESTful, como por exemplo Postman.

postman

Outra forma de instalar o Elasticsearch facilmente é utilizando Docker, se você ainda não conhece como funciona o Docker acesse este artigo que explica alguns conceitos e como pode ser utilizado.

1. Baixe a imagem e executa o container:

$ docker run -d -p 9200:9200 -p 9300:9300 elasticsearch

2. Testa se o Elasticsearch está executando:

$ curl -i -XGET 'localhost:9200/'

Instalando o cliente Elasticsearch para PHP

Vamos instalá-lo usando o composer. Adicione um arquivo composer.json no diretório onde você vai criar seu projeto PHP e cole o seguinte texto:

{
   "require": {
      "elasticsearch/elasticsearch": "~2.0"
   }
}

Agora execute composer install.

Conectando Elasticsearch e PHP

Agora vamos criar um arquivo index.php no mesmo diretório onde você adicionou o composer.json, e adicionar o seguinte código:

<?php
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();

if ($client) {
echo 'conectado';
}

Salve o arquivo e execute. Se receber algum erro, certifique-se que o Elasticsearch está em execução.

Indexando dados no Elasticsearch

Já estamos conectados ao Elasticsearch, agora vamos criar um índice com alguns dados. Edite o arquivo index.php e substitua o conteúdo por este abaixo:

<?php
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
   'index' => 'meu_indice',
   'type' => 'meu_tipo',
   'id' => 'meu_id2',
   'body' => [
      'primeiro campo' => 'Adicionando meu primeiro campo no Elasticsearch'
   ],
];
$response = $client->index($params);
echo $response['created'];

Execute novamente, ao executar você receberá “1” como retorno, que é o número de registros adicionados.

Recuperando dados do Elasticsearch

Agora temos um índice, vamos obter dados a partir dele. Altere novamente o arquivo index.php pelo código abaixo:

<?php
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
   'index' => 'meu_indice',
   'type' => 'meu_tipo',
   'id' => 'meu_id2',
];
$response = $client->get($params);
echo $response['_source']['primeiro campo'];

Ao executar este código você irá ter como retorno o texto que adicionamos “Adicionando meu primeiro campo no Elasticsearch”.

Fazendo uma busca no Elasticsearch

Vamos ver agora como podemos fazer busca no Elasticsearch, por alguma palavra ou texto. Substitua novamente o arquivo index.php pelo código abaixo:

<?php
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
   'index' => 'meu_indice',
   'type' => 'meu_indice',
   'body' => [
      'query' => [
         'match' => [
            'primeiro campo' => 'meu primeiro campo'
         ],
      ],
   ],
];

$response = $client->search($params);
$hits = count($response['hits']['hits']);
$result = null;
$i = 0;
while ($i < $hits) {
   $result[$i] = $response['hits']['hits'][$i]['_source'];
   $i++;
}
foreach ($result as $key => $value) {
   echo $value['primeiro campos'] . "<br>";
}

Agora vamos entender o código um pouco. Quando executamos uma consulta no Elasticsearch ele poderá retornar muitos resultados, incluindo o nosso resultado de consulta específica. Precisamos buscar o nosso resultado a partir dele e para isso, primeiro é preciso verificar quantos resultados temos, por isso temos este trecho:

$hits = count($response['hits']['hits']);

while ($i < $hits) {
   $result[$i] = $response['hits']['hits'][$i]['_source'];
   $i++;
}

Depois disso, imprimimos o resultado em um navegador. Agora, execute o código fornecido acima, e você obterá o seguinte resultado:

“Adicionando meu primeiro campo no Elasticsearch”.

Todos os arquivos e códigos utilizados neste tutorial, pode ser encontrado aqui.

Conclusão
Neste tutorial você pode ver algumas das principais características do Elasticsearch e como é fácil utilizá-lo com PHP. Você também viu como realizar uma pesquisa com PHP e Elasticsearch. Se ficou alguma dúvida sobre algum ponto apresentado ou ainda algo que não foi citado, por favor deixe um comentário abaixo!

2 comments

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *