Palestra apresentada na PHP Conference 2014. Introdução ao ElasticSearch, com sua configuração, conceitos e uso. Exemplos de uso do API com o PHP e melhores práticas.
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
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
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
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
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
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