SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
elasticsearch.
Motor de busca e além
Lições aprendidas criando
Tu Proximo Trabajo.
Miguel Gallardo
Mais de 10 anos de experiência como desenvolvedor, com um salário.
Fanático por computador desde os 7 anos de idade.
Desenvolvedor desde os 13 anos de idade.
Eu sempre estou buscando melhorar minhas habilidades, me tornei
um programador poliglota que trabalha em várias linguagens de
programação e múltiplos paradigmas de desenvolvimento.
Miguel Gallardo
Mais de 10 anos de experiência como
desenvolvedor, com um salário.
Fanático por computador desde os 7 anos de idade.
Desenvolvedor desde os 13 anos de idade.
Eu sempre estou buscando melhorar minhas
habilidades, me tornei um programador poliglota
que trabalha em várias linguagens de programação
e múltiplos paradigmas de desenvolvimento.
6 anos
Search the web using Google!
10 results Google Search I'm feeling lucky
We've moved. New site at google.com
About the Google Stanford Project
Get Google! updates monthly!
your e-mail Subscribe Archive
Copyright ©1997-8 Stanford University
• 52.069 empregados (Q2 2014)
• renda: ~US$ 60 bilhões
• Valor de mercado: ~US$ 392 bilhões
• +4 milhões de servidores
• 120 bilhões buscas por mês
• Adsense, Gmail, google maps, street view, youtube,
android, chrome, etc
¿Google?
¿como podemos fazer o
próximo Google?Google?
LIKE / MYSQL FULL TEXT
• SELECT * FROM `table` WHERE `field` LIKE “%text%";
• SELECT * FROM `table` MATCH (`field`,`desc`) AGAINST
("Text")
• Muito facil de implementar
• Desempenho é ruim (fácil de DoS)
• Sharding manual
• corrupção MyISAM
• Sintaxe de consulta limitada
• No é un motor de busca!
¿SQL?
¿motor de busca SQL?
• Launched 2006
• ~3 milhões de avisos
• ~1000 fuentes de avisos
• “SasaIndex”
• RIP 2010
GoSasa
• Lançado 2007
• 9 milhões ofertas de empregos histórico
• 200K ofertas de emprego atuais
• 80K visitas mensal
• 1º motor de busca de emprego na
Argentina *
Tu Próximo Trabajo
MySQL
Sphinx Apache
Crawlers
2008
Sphinx é um servidor de pesquisa de texto
completo de código aberto, projetado a partir
do zero com o desempenho, relevância (aka a
qualidade da pesquisa), e simplicidade de
integração em mente.
• Alta velocidade de indexação (10~15 MB/s em uma
• CPU)
• Alta velocidade de pesquisa (500+ queries/sec)
• Alta escalabilidade: Craigslist.org
• 300 milhões de consultas/dia
• 15 clusters
• BoardReader.com: +16 bilhões de documentos
indexados em 37 máquinas.
• Fala protocolo MySQL
• Não é em tempo real! Reindexação de dados completo
(2008)
• Configuração da velha escola (.conf files)
• Configuração de cluster complexo
• Velha escola
• difícil de instalar, configurar e escalabilidade
• Protocolo proprietário
• Não de esquema livre
“Solr é uma plataforma de pesquisa de código
aberto do projeto Apache Lucene. Suas
principais características incluem pesquisa de
texto completo, bateu destacando, pesquisa
facetada, clustering dinâmica, integração de
banco de dados e de documentos ricos (por
exemplo, Word, PDF). Pesquisa distribuída e
replicação do índice, Solr é altamente escalável.”
Solr/Lucene
Um Sistema de Gestão de Documentos intuitiva,
criada por advogados para advogados
• servidor backend: php
• Clientes: ruby, java, net
• MySQL para dados. MongoDB para arquivos e
documentos
Solr/Lucene
elasticsearch.new kid on the block
Elasticsearch é um motor de pesquisa e
análise flexível e poderoso, distribuido, em
tempo real e código aberto.
Elasticsearch é um motor de pesquisa e
análise flexível e poderoso, distribuido, em
tempo real e código aberto.
• JSON
• RESTful API
• “Schema free”
Elasticsearch é um motor de pesquisa e
análise flexível e poderoso, distribuido, em
tempo real e código aberto.
• Master nodes & data nodes;
• Réplicas e fragmentos automáticas
• Transporte assíncrona entre nodos
Elasticsearch é um motor de pesquisa e
análise flexível e poderoso, distribuido, em
tempo real e código aberto.
• Flush cada 1 segundo
elasticsearch.
Evolução
• Indexadores personalizados
• Índices invertidos
• Analisadores personalizados
• Faceting
• Configuração de analisadores
• Faceting, Geoespacial
• Mapeamento de documentos
• Consultas de sub-documentos
• Replicação
• JSON
• Faceting, consultas complexas
2014
HAProxy
Crawler
MySQL
Saver
Parser
Nginx
Beanstalkd
Pesquisando 50 milhões de locais em tempo real?
Foursquare faz isso usando ElasticSearch
Pesquisa 20TB de dados usando ElasticSearch, incluindo 1,3
bilhões de arquivos e 130 bilhões de linhas de código
Usa ElasticSearch para fornecer resultados imediatos e
relevantes para a sua plataforma de distribuição de áudio em
linha atingindo 180 milhões de pessoas
Usa ElasticSearch para fornecer resultados de mais de 20
milhões de produtos, um segundo depois de um artigo foi
publicado já está disponível nos resultados
Usa ElasticSearch para fornecer resultados de 25 milhões de
usuários por dia. 70 milhões de documentos indexados. 215
GB de Dados
Pesquisa não estruturada
Pesquisa estruturada (FACETS!)
Enriquecimento
Ordenar por
Paginação
Agregação
Conceitos
• Cluster
Um grupo de nodos compartilhando o mesmo conjunto de índices
• Node
Uma instância ElasticSearch em execução (processo JVM)
• Index ≈ MySQL database
Um conjunto de documentos de possivelmente diferentes tipos
Armazenado em um ou mais fragmentos
• Type ≈ MySQL Table
um conjunto de documentos em um índice que compartilham o
mesmo esquema
• Shard
Um índice Lucene, alocado em um nodo
como instalar?
1. Faça o download e extrair:
http://www.elasticsearch.org/download/
2. $ bin/elasticsearch
Debian/Ubuntu
1. apt-get install elasticsearch
RPM
1. yum install elasticsearch
API: Apenas REST!
http://HOST:PORT/índice(s)/tipo(s)/_action|id
métodos HTTP: GET, PUT, POST, DELETE
Clientes:
• Curl
• PHP - elastica/celastica
• Ruby
• Python
• Perl
• JS
• ETC
Indexar um documento
CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{
"title" : "Django Unchained",
"genre" : "western",
"release_date" : "2012-12-25"
}’
Atualizar um documento
CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{
"director" : {
"lastname" : "Tarantino",
"firstname" : "Quentin"
},
"actors" : [
{
"lastname" : "Foxx",
"firstname" : "Jamie"
},
{
"lastname" : "Waltz",
"firstname" : "Christoph"
},
{
"lastname" : "Tarantino",
"firstname" : "Quentin"
},
]
}’
Buscar um documento
CURL -XGET ‘http://localhost:9200/movies/movie/_search?q=Tarantino' -d ‘{
"_index" : "movies",
"_type" : "movie",
"_id" : "1",
"_version" : "2",
"title" : "Django Unchained",
"genre" : "western",
"release_date" : "2012-12-25",
"director" : {
"lastname" : “Tarantino", "firstname" : "Quentin"
},
"actors" : [
{
"lastname" : “Foxx", "firstname" : "Jamie"
},
{
"lastname" : “Waltz", "firstname" : "Christoph"
},
{
"lastname" : “Tarantino", "firstname" : "Quentin"
},
]
}’
Mapeamento - Schema
CURL -XPUT ‘http://localhost:9200/movies/movie/_mapping' -d ‘{
"movies" : { "properties" : {
"title" : {"type" : "string"},
"genre" : {"type" : "string"},
"release_date" : {"type" : "date", "format" : "yyyy-MM-dd"},
"director" : { "type" : "object", "properties" : {
"lastname" : {"type" : "string"},
"firstname" : {"type" : "string"}
}
},
}
}
}’
Query dsl
match, field, query_string, bool, term,
Fuzzy, match_all,more like this, geo,
Range, wildcard, span,
...
Filtros
limit, and, or, not, exists,
geo_distance,geo_distance_range,
geo_box, geo_shape, range
numeric_range, has_parent, has_child
...
Rivers
Um River é um serviço pluggable funcionando
dentro elasticsearch conjunto puxando dados (ou
sendo empurrado com os dados) que é, então,
indexada no cluster.
• CouchDB
• rabbitmq
• twitter
• wikipedia
• MongoDB
• JDBC
Percolator
A consulta pode ser salvo como um documento em
elasticsearch, qualquer nova coador documento
correspondente será adicionado ao http://
HOST:PORT/índice(s)/tipo(s)/_percolate.
Motor de busca e alem.
Elasticsearch, logstash e kibana
Logstash
Logstash ajuda a tirar logs e outros dados de
eventos de tempo com base de qualquer sistema e
armazená-lo em um único lugar para transformação
e processamento adicional.
Kibana
ELK stack
Miguel Gallardo
@mg3dem
miguel@tuproximotrabajo.com
Miguel Gallardo
@mg3dem
miguel@tuproximotrabajo.com
Obrigado!

Mais conteúdo relacionado

Mais procurados

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...Luiz Henrique Zambom Santana
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
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 MongoDBAri Stopassola Junior
 
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 saberChristiano Anderson
 
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 ZabbixJanssen Lima
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDBLelyBarros
 
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 Marcos Thomaz
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosYuri Adams
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
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 PostgreSQLRaul Oliveira
 

Mais procurados (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
 
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
 
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
 
Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
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
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a Documentos
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
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
 

Destaque

Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.4LinuxCursos
 
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Miguel Gallardo
 
Como Pesquisar Na Internet
Como Pesquisar Na  InternetComo Pesquisar Na  Internet
Como Pesquisar Na Internetguest850463
 
O que é um browser
O que é um browserO que é um browser
O que é um browserLeonor Costa
 

Destaque (6)

Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.
 
Motores de Busca
Motores de BuscaMotores de Busca
Motores de Busca
 
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
Arquitectura de las nuevas aplicaciones web: Como lograr escalabilidad, alta ...
 
Como Pesquisar Na Internet
Como Pesquisar Na  InternetComo Pesquisar Na  Internet
Como Pesquisar Na Internet
 
O que é um browser
O que é um browserO que é um browser
O que é um browser
 

Semelhante a Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo Trabajo - PHPSC Conf 2014

Pesquisa do Sapo
Pesquisa do SapoPesquisa do Sapo
Pesquisa do Sapocodebits
 
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...Tchelinux
 
Persistência Poliglota na Prática
Persistência Poliglota na PráticaPersistência Poliglota na Prática
Persistência Poliglota na PráticaIvayr Farah Netto
 
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 Elasticsearchtdc-globalcode
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...iMasters
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreGivanaldo Rocha
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014Fernando Boaglio
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekLuiz Carlos Faria
 
Elasticsearch com node.js
Elasticsearch com node.jsElasticsearch com node.js
Elasticsearch com node.jsKirmayr tomaz
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLFernando Ike
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraCDS
 

Semelhante a Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo Trabajo - PHPSC Conf 2014 (20)

Pesquisa do Sapo
Pesquisa do SapoPesquisa do Sapo
Pesquisa do Sapo
 
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...
 
Persistência Poliglota na Prática
Persistência Poliglota na PráticaPersistência Poliglota na Prática
Persistência Poliglota na Prática
 
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
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Nosql4java
Nosql4javaNosql4java
Nosql4java
 
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...Android DevConference - Elastic Search como ferramenta de busca em aplicações...
Android DevConference - Elastic Search como ferramenta de busca em aplicações...
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Desenvolvimento Web com Software Livre
Desenvolvimento Web com Software LivreDesenvolvimento Web com Software Livre
Desenvolvimento Web com Software Livre
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014
 
Bigadata casese opotunidades
Bigadata casese opotunidadesBigadata casese opotunidades
Bigadata casese opotunidades
 
Docker Everywhere - MTAC Week
Docker Everywhere - MTAC WeekDocker Everywhere - MTAC Week
Docker Everywhere - MTAC Week
 
Arquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXIArquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXI
 
Elasticsearch com node.js
Elasticsearch com node.jsElasticsearch com node.js
Elasticsearch com node.js
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQL
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infra
 

Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo Trabajo - PHPSC Conf 2014

  • 1. elasticsearch. Motor de busca e além Lições aprendidas criando Tu Proximo Trabajo.
  • 2. Miguel Gallardo Mais de 10 anos de experiência como desenvolvedor, com um salário. Fanático por computador desde os 7 anos de idade. Desenvolvedor desde os 13 anos de idade. Eu sempre estou buscando melhorar minhas habilidades, me tornei um programador poliglota que trabalha em várias linguagens de programação e múltiplos paradigmas de desenvolvimento.
  • 3. Miguel Gallardo Mais de 10 anos de experiência como desenvolvedor, com um salário. Fanático por computador desde os 7 anos de idade. Desenvolvedor desde os 13 anos de idade. Eu sempre estou buscando melhorar minhas habilidades, me tornei um programador poliglota que trabalha em várias linguagens de programação e múltiplos paradigmas de desenvolvimento.
  • 4. 6 anos Search the web using Google! 10 results Google Search I'm feeling lucky We've moved. New site at google.com About the Google Stanford Project Get Google! updates monthly! your e-mail Subscribe Archive Copyright ©1997-8 Stanford University
  • 5. • 52.069 empregados (Q2 2014) • renda: ~US$ 60 bilhões • Valor de mercado: ~US$ 392 bilhões • +4 milhões de servidores • 120 bilhões buscas por mês • Adsense, Gmail, google maps, street view, youtube, android, chrome, etc ¿Google?
  • 6. ¿como podemos fazer o próximo Google?Google?
  • 7. LIKE / MYSQL FULL TEXT • SELECT * FROM `table` WHERE `field` LIKE “%text%"; • SELECT * FROM `table` MATCH (`field`,`desc`) AGAINST ("Text") • Muito facil de implementar • Desempenho é ruim (fácil de DoS) • Sharding manual • corrupção MyISAM • Sintaxe de consulta limitada • No é un motor de busca! ¿SQL?
  • 9. • Launched 2006 • ~3 milhões de avisos • ~1000 fuentes de avisos • “SasaIndex” • RIP 2010 GoSasa
  • 10. • Lançado 2007 • 9 milhões ofertas de empregos histórico • 200K ofertas de emprego atuais • 80K visitas mensal • 1º motor de busca de emprego na Argentina * Tu Próximo Trabajo
  • 11.
  • 13. Sphinx é um servidor de pesquisa de texto completo de código aberto, projetado a partir do zero com o desempenho, relevância (aka a qualidade da pesquisa), e simplicidade de integração em mente.
  • 14. • Alta velocidade de indexação (10~15 MB/s em uma • CPU) • Alta velocidade de pesquisa (500+ queries/sec) • Alta escalabilidade: Craigslist.org • 300 milhões de consultas/dia • 15 clusters • BoardReader.com: +16 bilhões de documentos indexados em 37 máquinas. • Fala protocolo MySQL
  • 15. • Não é em tempo real! Reindexação de dados completo (2008) • Configuração da velha escola (.conf files) • Configuração de cluster complexo • Velha escola • difícil de instalar, configurar e escalabilidade • Protocolo proprietário • Não de esquema livre
  • 16. “Solr é uma plataforma de pesquisa de código aberto do projeto Apache Lucene. Suas principais características incluem pesquisa de texto completo, bateu destacando, pesquisa facetada, clustering dinâmica, integração de banco de dados e de documentos ricos (por exemplo, Word, PDF). Pesquisa distribuída e replicação do índice, Solr é altamente escalável.” Solr/Lucene
  • 17. Um Sistema de Gestão de Documentos intuitiva, criada por advogados para advogados • servidor backend: php • Clientes: ruby, java, net • MySQL para dados. MongoDB para arquivos e documentos
  • 18.
  • 21. Elasticsearch é um motor de pesquisa e análise flexível e poderoso, distribuido, em tempo real e código aberto.
  • 22. Elasticsearch é um motor de pesquisa e análise flexível e poderoso, distribuido, em tempo real e código aberto. • JSON • RESTful API • “Schema free”
  • 23. Elasticsearch é um motor de pesquisa e análise flexível e poderoso, distribuido, em tempo real e código aberto. • Master nodes & data nodes; • Réplicas e fragmentos automáticas • Transporte assíncrona entre nodos
  • 24. Elasticsearch é um motor de pesquisa e análise flexível e poderoso, distribuido, em tempo real e código aberto. • Flush cada 1 segundo
  • 25. elasticsearch. Evolução • Indexadores personalizados • Índices invertidos • Analisadores personalizados • Faceting • Configuração de analisadores • Faceting, Geoespacial • Mapeamento de documentos • Consultas de sub-documentos • Replicação • JSON • Faceting, consultas complexas
  • 26.
  • 27.
  • 28.
  • 30. Pesquisando 50 milhões de locais em tempo real? Foursquare faz isso usando ElasticSearch Pesquisa 20TB de dados usando ElasticSearch, incluindo 1,3 bilhões de arquivos e 130 bilhões de linhas de código Usa ElasticSearch para fornecer resultados imediatos e relevantes para a sua plataforma de distribuição de áudio em linha atingindo 180 milhões de pessoas Usa ElasticSearch para fornecer resultados de mais de 20 milhões de produtos, um segundo depois de um artigo foi publicado já está disponível nos resultados Usa ElasticSearch para fornecer resultados de 25 milhões de usuários por dia. 70 milhões de documentos indexados. 215 GB de Dados
  • 37. Conceitos • Cluster Um grupo de nodos compartilhando o mesmo conjunto de índices • Node Uma instância ElasticSearch em execução (processo JVM) • Index ≈ MySQL database Um conjunto de documentos de possivelmente diferentes tipos Armazenado em um ou mais fragmentos • Type ≈ MySQL Table um conjunto de documentos em um índice que compartilham o mesmo esquema • Shard Um índice Lucene, alocado em um nodo
  • 38. como instalar? 1. Faça o download e extrair: http://www.elasticsearch.org/download/ 2. $ bin/elasticsearch Debian/Ubuntu 1. apt-get install elasticsearch RPM 1. yum install elasticsearch
  • 39. API: Apenas REST! http://HOST:PORT/índice(s)/tipo(s)/_action|id métodos HTTP: GET, PUT, POST, DELETE Clientes: • Curl • PHP - elastica/celastica • Ruby • Python • Perl • JS • ETC
  • 40. Indexar um documento CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{ "title" : "Django Unchained", "genre" : "western", "release_date" : "2012-12-25" }’
  • 41. Atualizar um documento CURL -XPUT ‘http://localhost:9200/movies/movie/1' -d ‘{ "director" : { "lastname" : "Tarantino", "firstname" : "Quentin" }, "actors" : [ { "lastname" : "Foxx", "firstname" : "Jamie" }, { "lastname" : "Waltz", "firstname" : "Christoph" }, { "lastname" : "Tarantino", "firstname" : "Quentin" }, ] }’
  • 42. Buscar um documento CURL -XGET ‘http://localhost:9200/movies/movie/_search?q=Tarantino' -d ‘{ "_index" : "movies", "_type" : "movie", "_id" : "1", "_version" : "2", "title" : "Django Unchained", "genre" : "western", "release_date" : "2012-12-25", "director" : { "lastname" : “Tarantino", "firstname" : "Quentin" }, "actors" : [ { "lastname" : “Foxx", "firstname" : "Jamie" }, { "lastname" : “Waltz", "firstname" : "Christoph" }, { "lastname" : “Tarantino", "firstname" : "Quentin" }, ] }’
  • 43. Mapeamento - Schema CURL -XPUT ‘http://localhost:9200/movies/movie/_mapping' -d ‘{ "movies" : { "properties" : { "title" : {"type" : "string"}, "genre" : {"type" : "string"}, "release_date" : {"type" : "date", "format" : "yyyy-MM-dd"}, "director" : { "type" : "object", "properties" : { "lastname" : {"type" : "string"}, "firstname" : {"type" : "string"} } }, } } }’
  • 44. Query dsl match, field, query_string, bool, term, Fuzzy, match_all,more like this, geo, Range, wildcard, span, ...
  • 45. Filtros limit, and, or, not, exists, geo_distance,geo_distance_range, geo_box, geo_shape, range numeric_range, has_parent, has_child ...
  • 46. Rivers Um River é um serviço pluggable funcionando dentro elasticsearch conjunto puxando dados (ou sendo empurrado com os dados) que é, então, indexada no cluster. • CouchDB • rabbitmq • twitter • wikipedia • MongoDB • JDBC
  • 47. Percolator A consulta pode ser salvo como um documento em elasticsearch, qualquer nova coador documento correspondente será adicionado ao http:// HOST:PORT/índice(s)/tipo(s)/_percolate.
  • 48. Motor de busca e alem. Elasticsearch, logstash e kibana
  • 49. Logstash Logstash ajuda a tirar logs e outros dados de eventos de tempo com base de qualquer sistema e armazená-lo em um único lugar para transformação e processamento adicional.