SlideShare une entreprise Scribd logo
1  sur  22
BigData 
Indexando e buscando dados com ElasticSearch 
e PHP 
Felipe Weckx
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
2/22 
Agenda 
● ElasticSearch 
● PHP + ElasticSearch 
● Lições Aprendidas
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
3/22 
ElasticSearch 
● Busca e análise de dados 
● Gratuito e Open Source 
● Desenvolvido em Java 
● Comunidade ativa 
● Excelente documentação 
● Fácil de instalar e configurar 
~ $ tar xzf elasticsearch-1.4.1.tar.gz 
~ $ ./elasticsearch-1.4.1/bin/elasticsearch
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
4/22 
Para que usar? 
● Complemento da base de dados 
● Buscas FULLTEXT e complexas 
● Estruturas de dados simples 
● Análise estatística
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
5/22 
ElasticSearch - Conceitos 
● Índices → Tipos → Documentos 
● Schema-less – documentos JSON 
● Internamente utiliza Lucene 
● TODOS os campos são indexados 
– Indexação utilizando “Índice Reverso” 
● Interface através de API RESTful
Índice Tipo ID 
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
6/22 
Indexando 
~ $ curl -XPUT localhost:9200/phpconference/palestras/1 -d '{ 
titulo : "Palestra BigData ", 
data : "2014-12-05", 
tags : [ "bigdata", "elasticsearch", "php"] 
}' 
localhost:9200/phpconference/palestras/1
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
7/22 
Consultando 
~ $ curl -XGET localhost:9200/phpconference/palestras/1?pretty 
{ 
"_index" : "phpconference", 
"_type" : "palestras", 
"_id" : "1", 
"_version" : 1, 
"found" : true, 
"_source":{ 
titulo : "Palestra BigData ", 
data : "2014-12-05", 
tags : [ "bigdata", "elasticsearch", "php"] 
} 
}
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
8/22 
Rivers 
● Plugins 
● Sincronização automática com outras fontes 
– JDBC (MySQL, Oracle, PostgreSQL, etc) 
– MongoDB 
– Twitter 
– … 
● Úteis para integração rápida, mas podem não 
ser a melhor solução
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
9/22 
Escalando 
● Escalonamento automático 
● Operações podem ser feitas 
em qualquer nó 
● Shard = base de busca 
independente 
● Configuração por Índice 
– Quantidade de shards 
– Quantidade de réplicas
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
10/22 
ElasticSearch + PHP 
● Biblioteca oficial 
– PHP >= 5.3.9 
– ConnectionPool 
– Instalação simples 
com Composer 
● Alternativas* 
– php-curl 
– php-http 
* Requisições manuais 
{ 
"require": { 
"elasticsearch/elasticsearch": "~1.0" 
} 
}
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
11/22 
Configuração Client PHP 
<?php 
$params = array( 
'hosts' => [ 
'192.168.1.6:9200', 
'192.168.1.7', //Porta padrão 9200 
'https://192.168.1.8' 
] 
); 
$client = new ElasticsearchClient($params); 
● Um dos hosts da lista é sorteado aleatoriamente 
● ConnectionPool interna mantém status dos hosts 
● Pode descobrir hosts automaticamente através de sniffing
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
12/22 
Indexando com PHP 
$document = array( 
'index' => 'phpconference', 
'type' => 'palestras', 
'body' => array( 
'titulo' => 'A future without frameworks', 
'data' => '2015-12-05' 
) 
); 
$response = $client->index($document); 
$id = $response['_id']; //ID gerado automaticamente 
echo 'Indexado ' . $id ;
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
13/22 
Busca – Query String 
$params['index'] = 'phpconference'; 
$params['type'] = 'palestras'; 
$params['body'] = [ 
'query' => [ 
'query_string' => [ 'query' => 'future' ] 
] 
]; 
$results = $client->search($params);
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
14/22 
Query Strings - Exemplos 
● assunto:”bigdata” AND data:”2014-12-05” 
● palestrante:felipe OR palestrante:diego 
● data:>2014-12-05 
– Documentos com data > 05/12/2014 
● elasticsearch +php -java 
– Buscar por ElasticSearch, deve conter o termo 
“php” e não o termo “java”
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
15/22 
Queries vs Filtros 
● Queries 
– Utilizar buscas aproximadas 
– Retorna score dos resultados 
– Sem cache 
● Filtros 
– Cache! 
– Utilizar para buscas do tipo sim/não 
– Podem ser usados em conjunto com queries
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
16/22 
Busca Composta 
$params['body'] = [ 
'query' => [ 
'filtered' => [ 
'query' => [ 
'term' => [ 'titulo' => 'fut*' ] 
], 
'filter' => [ 
'match' => [ 'data' => '2014-12-05'] 
] 
] 
];
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
17/22 
Aggregations 
● Parte da funcionalidade de busca 
● Permite fazer agrupamentos e métricas 
● Agrupamentos podem ser retornados junto 
com os resultados 
– Para evitar: search_type = count 
● Múltiplos agrupamentos na mesma 
requisição
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
18/22 
Aggregations 
$params['body'] = [ 
'query' => [ 'match_all' => new stdClass() ], 
'aggs' => [ 
'palestras_por_data' => [ 
'date_histogram' => [ 
'field' => 'data', 
'interval' => 'day' 
] 
], 
'palestras_por_palestrante' => [ 
'terms' => ['field' : 'palestrante' ] 
] 
] 
];
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
19/22 
Aggregations - Resultado 
"palestras_por_data":{ 
"buckets":[ 
{ “key_as_string":"2014-12-05T00:00:00.000Z", 
"key":1417737600000, 
"doc_count":10 
}, 
... 
], 
"palestras_por_palestrante":{ 
"buckets":[ 
{ 
"key":"felipe", 
"doc_count":2 
}, 
]}
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
20/22 
Aprendizado 
● Objeto vazio = new stdClass(); 
● Quanto mais memória no servidor, melhor 
– Necessário configurar no ElasticSearch 
– Cuidado com estouro de HEAP no Java 
● Quando possível separar dados em mais de 
um índice 
– Ex: um índice por dia para histórico de eventos
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
21/22 
Perguntas?
PHP Conference 2014 BigData – ElasticSearch + PHP 
Felipe Weckx 
22/22 
Obrigado! 
Felipe Weckx 
felipe@weckx.net 
@weckx 
github.com/weckx 
linkedin.com/in/felipeweckx 
http://blog.weckx.net

Contenu connexe

Tendances

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
Thiago Avelino
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
Terra / Neo
 

Tendances (20)

Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...Instanciando a Arquitetura Lambda com  GraphX e Elasticsearch 2.0  em uma apl...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Workshop de ELK - EmergiNet
Workshop de ELK - EmergiNetWorkshop de ELK - EmergiNet
Workshop de ELK - EmergiNet
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Primeiros passos com a API do Zabbix
Primeiros passos com a API do ZabbixPrimeiros passos com a API do Zabbix
Primeiros passos com a API do Zabbix
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Mongo db
Mongo dbMongo db
Mongo db
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 

Similaire à BigData - ElasticSearch + PHP

Similaire à BigData - ElasticSearch + PHP (20)

Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
PHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHPPHP 7 - A Maioridade do PHP
PHP 7 - A Maioridade do PHP
 
De 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuáriosDe 1 a 1.000.00 de usuários
De 1 a 1.000.00 de usuários
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014
 
Mecanismo de busca .NET Core + MongoDB
Mecanismo de busca .NET Core + MongoDBMecanismo de busca .NET Core + MongoDB
Mecanismo de busca .NET Core + MongoDB
 
LDAP
LDAPLDAP
LDAP
 
Workshop Web e WordPress
Workshop Web e WordPressWorkshop Web e WordPress
Workshop Web e WordPress
 
Implementação de
Implementação de Implementação de
Implementação de
 
TDC2016POA | Trilha BigData - Orquestrando Hadoop, Cassandra e MongoDB com o ...
TDC2016POA | Trilha BigData - Orquestrando Hadoop, Cassandra e MongoDB com o ...TDC2016POA | Trilha BigData - Orquestrando Hadoop, Cassandra e MongoDB com o ...
TDC2016POA | Trilha BigData - Orquestrando Hadoop, Cassandra e MongoDB com o ...
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 

BigData - ElasticSearch + PHP

  • 1. BigData Indexando e buscando dados com ElasticSearch e PHP Felipe Weckx
  • 2. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 2/22 Agenda ● ElasticSearch ● PHP + ElasticSearch ● Lições Aprendidas
  • 3. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 3/22 ElasticSearch ● Busca e análise de dados ● Gratuito e Open Source ● Desenvolvido em Java ● Comunidade ativa ● Excelente documentação ● Fácil de instalar e configurar ~ $ tar xzf elasticsearch-1.4.1.tar.gz ~ $ ./elasticsearch-1.4.1/bin/elasticsearch
  • 4. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 4/22 Para que usar? ● Complemento da base de dados ● Buscas FULLTEXT e complexas ● Estruturas de dados simples ● Análise estatística
  • 5. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 5/22 ElasticSearch - Conceitos ● Índices → Tipos → Documentos ● Schema-less – documentos JSON ● Internamente utiliza Lucene ● TODOS os campos são indexados – Indexação utilizando “Índice Reverso” ● Interface através de API RESTful
  • 6. Índice Tipo ID PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 6/22 Indexando ~ $ curl -XPUT localhost:9200/phpconference/palestras/1 -d '{ titulo : "Palestra BigData ", data : "2014-12-05", tags : [ "bigdata", "elasticsearch", "php"] }' localhost:9200/phpconference/palestras/1
  • 7. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 7/22 Consultando ~ $ curl -XGET localhost:9200/phpconference/palestras/1?pretty { "_index" : "phpconference", "_type" : "palestras", "_id" : "1", "_version" : 1, "found" : true, "_source":{ titulo : "Palestra BigData ", data : "2014-12-05", tags : [ "bigdata", "elasticsearch", "php"] } }
  • 8. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 8/22 Rivers ● Plugins ● Sincronização automática com outras fontes – JDBC (MySQL, Oracle, PostgreSQL, etc) – MongoDB – Twitter – … ● Úteis para integração rápida, mas podem não ser a melhor solução
  • 9. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 9/22 Escalando ● Escalonamento automático ● Operações podem ser feitas em qualquer nó ● Shard = base de busca independente ● Configuração por Índice – Quantidade de shards – Quantidade de réplicas
  • 10. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 10/22 ElasticSearch + PHP ● Biblioteca oficial – PHP >= 5.3.9 – ConnectionPool – Instalação simples com Composer ● Alternativas* – php-curl – php-http * Requisições manuais { "require": { "elasticsearch/elasticsearch": "~1.0" } }
  • 11. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 11/22 Configuração Client PHP <?php $params = array( 'hosts' => [ '192.168.1.6:9200', '192.168.1.7', //Porta padrão 9200 'https://192.168.1.8' ] ); $client = new ElasticsearchClient($params); ● Um dos hosts da lista é sorteado aleatoriamente ● ConnectionPool interna mantém status dos hosts ● Pode descobrir hosts automaticamente através de sniffing
  • 12. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 12/22 Indexando com PHP $document = array( 'index' => 'phpconference', 'type' => 'palestras', 'body' => array( 'titulo' => 'A future without frameworks', 'data' => '2015-12-05' ) ); $response = $client->index($document); $id = $response['_id']; //ID gerado automaticamente echo 'Indexado ' . $id ;
  • 13. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 13/22 Busca – Query String $params['index'] = 'phpconference'; $params['type'] = 'palestras'; $params['body'] = [ 'query' => [ 'query_string' => [ 'query' => 'future' ] ] ]; $results = $client->search($params);
  • 14. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 14/22 Query Strings - Exemplos ● assunto:”bigdata” AND data:”2014-12-05” ● palestrante:felipe OR palestrante:diego ● data:>2014-12-05 – Documentos com data > 05/12/2014 ● elasticsearch +php -java – Buscar por ElasticSearch, deve conter o termo “php” e não o termo “java”
  • 15. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 15/22 Queries vs Filtros ● Queries – Utilizar buscas aproximadas – Retorna score dos resultados – Sem cache ● Filtros – Cache! – Utilizar para buscas do tipo sim/não – Podem ser usados em conjunto com queries
  • 16. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 16/22 Busca Composta $params['body'] = [ 'query' => [ 'filtered' => [ 'query' => [ 'term' => [ 'titulo' => 'fut*' ] ], 'filter' => [ 'match' => [ 'data' => '2014-12-05'] ] ] ];
  • 17. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 17/22 Aggregations ● Parte da funcionalidade de busca ● Permite fazer agrupamentos e métricas ● Agrupamentos podem ser retornados junto com os resultados – Para evitar: search_type = count ● Múltiplos agrupamentos na mesma requisição
  • 18. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 18/22 Aggregations $params['body'] = [ 'query' => [ 'match_all' => new stdClass() ], 'aggs' => [ 'palestras_por_data' => [ 'date_histogram' => [ 'field' => 'data', 'interval' => 'day' ] ], 'palestras_por_palestrante' => [ 'terms' => ['field' : 'palestrante' ] ] ] ];
  • 19. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 19/22 Aggregations - Resultado "palestras_por_data":{ "buckets":[ { “key_as_string":"2014-12-05T00:00:00.000Z", "key":1417737600000, "doc_count":10 }, ... ], "palestras_por_palestrante":{ "buckets":[ { "key":"felipe", "doc_count":2 }, ]}
  • 20. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 20/22 Aprendizado ● Objeto vazio = new stdClass(); ● Quanto mais memória no servidor, melhor – Necessário configurar no ElasticSearch – Cuidado com estouro de HEAP no Java ● Quando possível separar dados em mais de um índice – Ex: um índice por dia para histórico de eventos
  • 21. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 21/22 Perguntas?
  • 22. PHP Conference 2014 BigData – ElasticSearch + PHP Felipe Weckx 22/22 Obrigado! Felipe Weckx felipe@weckx.net @weckx github.com/weckx linkedin.com/in/felipeweckx http://blog.weckx.net