SlideShare uma empresa Scribd logo
1 de 69
Baixar para ler offline
Desenvolvendo um buscador com
PHP e Elasticsearch
Fernando Silva
@FernandoDebrand
Sobre mim!
Fernando Silva
Analista de Desenvolvimento
Visão Geral
◎ Comunidade
◎ Stack Open Source Elastic
◎ Elasticsearch
◉ Características
◉ Arquitetura
◉ Apache Lucene
◉ Cluster e Índice
◉ API RESTful / Clients
◎ Grandes projetos que usam
◎ Instalando e configurando
◎ Exemplos de utilização com PHP
◎ Ferramentas e frameworks
Comunidade Elastic
Comunidade Elastic
https://www.elastic.co/community
Forums | Meetups | Canais IRC Freenode
Comunidade Elastic
Stack Open Source Elastic
Stack Open Source Elastic
Elasticsearch
Elasticsearch
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.
Elasticsearch - Características
● Pesquisa e análise em tempo real
● Distribuída, 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
Arquitetura Elasticsearch
O Apache Lucene, ou simplesmente Lucene, é um software de
busca escrito em Java. É de código aberto (open source) da Apache
Software Foundation, licenciado sob Apache 2 Open Source License.
● Escalável e de alto desempenho de indexação
○ Mais de 150GB/hora
● Poderoso, preciso e eficiente algoritmos de pesquisa
○ Classificação de pesquisa
○ Múltiplos índices
○ Permite atualização e pesquisa simultânea
● Multi-plataforma
Conceitos Básicos
Existem alguns conceitos que são fundamentais
para Elasticsearch. Entender esses conceitos desde o
ínicio facilitará no processo de aprendizagem.
● Near Realtime (NRT)
● Cluster
● Node
● Index
● Type
● Document
● Shards & Replicas
Conceitos Básicos
Elasticsearch é uma plataforma de busca em tempo
real, podendo ter uma pequena latência(normalmente
um segundo).
Near Realtime (NRT)
Cluster é uma coleção de um ou mais nós
(servidores) que juntos detém os seus dados inteiros e
fornece recursos de indexação e pesquisa.
Cluster
Node é um servidor único que é parte do seu cluster,
armazena seus dados, e participa da indexação e
pesquisa.
Node
Um índice é um conjunto de documentos. Por
exemplo, pode se ter um índice para dados de cliente,
outro para catálogo de produtos.
Index
Dentro de um índice, você pode definir um ou mais
tipos. Um tipo é uma categoria/partição lógica do seu
índice.
Type
Fragmentos são utilizados quando se tem uma
grande quantidade de documentos, possibilitando
subdividir o seu índice em pedaços.
Réplicas são importantes por duas principais razões:
● Permite dividir horizontalmente o volume de
conteúdo
● Permite distribuir e paralelizar as operações,
aumentando assim o desempenho
Shards & Replicas
Shards & Replicas
Orientado a documentos
Utiliza banco de dados não relacional (NoSQL),
assim é armazenada entidades complexas no
Elasticsearch, como documentos JSON estruturados.
Todos os campos são indexados por padrão, e todos os
índices podem ser usados em uma consulta, para
retornar facilmente resultados complexos em uma
velocidade incrível.
Orientado a documentos
{
"curso": {
"codigo": "69212",
"nome": "ANÁLISE E DESENVOLVIMENTO DE SISTEMAS",
"modalidade": "Educação Presencial",
"grau": "Tecnológico",
"enade": "3",
"cpc": "3",
"cc": "3",
"periodicidade_integralizacao": "Semestral (6.0)",
"carga_horaria_minima": "2232 horas",
"vagas_autorizadas": "300",
"coordenador": "GUILHERME BERTONI MACHADO",
"situacao_funcionamento": "Em atividade",
"endereco": "Rua Coronel Genuíno 130",
"cep": "90010-150",
"municipio": "Porto Alegre",
"uf": "RS"
}
}
Orientado a documentos
API RESTful / Clients
API RESTful
Elasticsearch disponibiliza uma API. Quase que
qualquer ação pode ser executada usando API RESTful,
usando JSON através de HTTP.
Bibliotecas Client estão disponíveis para várias
linguagens de programação.
Clients
● Java API
● Java REST Client
● JavaScript API
● Groovy API
● .NET API
● PHP API
● Perl API
● Python API
● Ruby API
● E mais clients desenvolvidos pela comunidade
Comparação de Terminologias
Terminologias
Elasticsearch MySQL
Index Database
Type Table
Document Row
Field Column
Mapping Schema
Shard Partition
Quando usar
Elasticsearch?
Grandes projetos que usam
Elasticsearch
Message Analytics, armazena
dados de todos os canais de
comunicação.
Cases
Busca de notícias, vídeos e
fotos, com mais 180
consultas por segundo.
Servindo 4 milhões de vendedores, com
garantia de escalabilidade.
https://www.elastic.co/use-cases
Indexação de mais de 8
milhões de repositórios.
24 mil pesquisas por segundos no
MSN e utilizados em outros
produtos como, Listening Social e
Azure Search.
Já utiliza a 3 anos, para mais de
40 ferramentas, com mais de 60
milhões de consultas por dia.
O que já vimos até aqui
◎ Comunidade
◎ Stack Elastic
◎ Elasticsearch
◉ Características
◉ Arquitetura
◉ Apache Lucene
◉ Cluster e Índice
◉ API RESTful / Clients
◎ Grandes projetos que usam
◎ Instalando e configurando
◎ Exemplos de utilização com PHP
◎ Ferramentas e frameworks
Instalando e Configurando
Instalação
Faz o download em https://www.elastic.co/downloads/elasticsearch,
descompactar o zip.
Execute bin/elasticsearch em Unix ou bin/elasticsearch.bat no
Windows.
Teste executando:
$ curl -i -XGET 'localhost:9200/'
https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
Testando com Postman
Utilizando Docker
Baixe a imagem e executa o container:
$ docker run -d -p 9200:9200 -p 9300:9300 elasticsearch
Testa se o Elasticsearch está executando:
$ curl -i -XGET 'localhost:9200/'
https://store.docker.com/images/elasticsearch
Como usar com PHP
Instalando Pacote Elasticsearch
para PHP
Crie um diretório “elastic_php”, cria um arquivo composer.json
com o seguinte conteúdo.
{
"require": {
"elasticsearch/elasticsearch": "~5.0"
}
}
$ composer install
Conectando Elasticsearch com
PHP
Crie um arquivo index.php dentro do diretório “elastic_php” e
adicione o seguinte código.
<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
if ($client) {
echo 'conectado';
}
Indexação de dados no
Elasticsearch
Já estamos conectados ao Elasticsearch. Vamos criar um índice com
alguns dados.
<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::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'];
Obtendo dados do Elasticsearch
Já temos um índice criado, vamos obter os dados a partir dele.
<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
$params = [
'index' => 'meu_indice',
'type' => 'meu_tipo',
'id' => 'meu_id2',
];
$response = $client->get($params);
echo $response['_source']['primeiro_campo'];
Pesquisando em Elasticsearch
<?php
require 'vendor/autoload.php';
$client = ElasticsearchClientBuilder::create()->build();
$params = [
'index' => 'meu_indice',
'type' => 'meu_tipo',
'body' => [
'query' => [
'match' => [
'primeiro_campo' => 'meu primeiro campo'
],
],
],
];
Pesquisando em Elasticsearch
$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_campo'] . "<br>";
}
https://medium.com/@FernandoDebrand/utilizando-elasticsearch-com-php-8aba29d8d024
Case uPlanAcademic.com
Objetivo
Objetivos
Sistema web para possibilitar o
planejamento acadêmico, através da
centralização de informações sobre cursos,
podendo assim auxiliar os futuros
acadêmicos em suas escolhas.
Arquitetura
Arquitetura
Arquitetura
Web Crawler
Web Crawler, é um robô que navega
sistematicamente por páginas web com o motivo de
fazer indexação.
Web Crawler
Web Crawler - CAPTCHA
CAPTCHA
JSON - Índice
{
"instituicao": {
"codigo": "3804",
"nome": " FACULDADE SENAC PORTO ALEGRE - FSPOA - SENAC/RS",
"endereco": "Rua Coronel Genuíno",
"numero": "130",
"complemento": "",
"cep": "90010-150 ",
"bairro": "Centro",
"municipio": "Porto Alegre",
"uf": "RS",
"telefone": "(051) 3284 1900",
"fax": "(051) 3284 1902",
"organizacao_academica": "Faculdade",
"site": "www.senacrs.com.br",
"categoria_administrativa": "Privada sem fins lucrativos",
"email": "ikaspary@senacrs.com.br ",
"ci_conceito_institucional": {
"valor": "3",
"ano": "2014"
},
"igc_indice_geral_cursos": {
"valor": "3",
"ano": "2014"
},
"igc_continuo": {
"valor": "2.6664",
"ano": "2014"
}
},
JSON - Índice
"curso": {
"codigo": "69212",
"nome": "ANÁLISE E DESENVOLVIMENTO DE SISTEMAS",
"modalidade": "Educação Presencial",
"grau": "Tecnológico",
"enade": "3",
"cpc": "3",
"cc": "3",
"data_inicio_funcionamento": "05/04/2004",
"periodicidade_integralizacao": "Semestral (6.0)",
"carga_horaria_minima": "2232 horas",
"vagas_autorizadas": "300",
"coordenador": "GUILHERME BERTONI MACHADO",
"situacao_funcionamento": "Em atividade",
"endereco": "Rua Coronel Genuíno 130",
"cep": "90010-150",
"municipio": "Porto Alegre",
"uf": "RS"
}
}
Arquitetura
Arquitetura
Buscador
Home Buscador
Possibilidade de buscar por nome de curso ou
instituição.
Busca Avançada
Possibilidade de buscar por nome, grau e modalidade
de curso e nome, município e UF da instituição.
Tecnologias e Ferramentas
Tecnologias e Ferramentas
Hospedagem Elasticsearch
Hospedagem Elasticsearch
Referências/Links
◎ Client Elasticsearch-PHP
(https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.
html)
◎ Client Elasticsearch
(https://www.elastic.co/guide/en/elasticsearch/client/index.html)
◎ Guia Elasticsearch
(https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html)
◎ Guia Elastic Stack (https://www.elastic.co/guide/index.html)
◎ DomCrawler
(https://symfony.com/doc/current/components/dom_crawler.html)
◎ Laravel and Elasticsearch (https://laravel-news.com/laravel-and-elasticsearch)
◎ Utilizando Elasticsearch com PHP
(https://medium.com/@FernandoDebrand/utilizando-elasticsearch-com-php-
8aba29d8d024)
Obrigado!
Perguntas?
speakerdeck.com/fernandodebrando
fernando.poa.br

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Apresentação php
Apresentação phpApresentação php
Apresentação php
 
Junit
JunitJunit
Junit
 
Web api
Web apiWeb api
Web api
 
Introducing type script
Introducing type scriptIntroducing type script
Introducing type script
 
#1 Robot Floripa - Robot Framework: O que é? Onde vive? Do que se alimenta?
#1 Robot Floripa - Robot Framework: O que é? Onde vive? Do que se alimenta?#1 Robot Floripa - Robot Framework: O que é? Onde vive? Do que se alimenta?
#1 Robot Floripa - Robot Framework: O que é? Onde vive? Do que se alimenta?
 
TypeScript Presentation
TypeScript PresentationTypeScript Presentation
TypeScript Presentation
 
Regular Expression (Regex) Fundamentals
Regular Expression (Regex) FundamentalsRegular Expression (Regex) Fundamentals
Regular Expression (Regex) Fundamentals
 
Lesson 2 php data types
Lesson 2   php data typesLesson 2   php data types
Lesson 2 php data types
 
WEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScriptWEB TECHNOLOGIES JavaScript
WEB TECHNOLOGIES JavaScript
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 
Express JS Rest API Tutorial
Express JS Rest API TutorialExpress JS Rest API Tutorial
Express JS Rest API Tutorial
 
C# web api
C# web apiC# web api
C# web api
 
Http
HttpHttp
Http
 
Testing with Spring: An Introduction
Testing with Spring: An IntroductionTesting with Spring: An Introduction
Testing with Spring: An Introduction
 
Angular Pipes Workshop
Angular Pipes WorkshopAngular Pipes Workshop
Angular Pipes Workshop
 
Spring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. RESTSpring Web Services: SOAP vs. REST
Spring Web Services: SOAP vs. REST
 
Introduction to the Web API
Introduction to the Web APIIntroduction to the Web API
Introduction to the Web API
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Rest API
Rest APIRest API
Rest API
 
Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1Desenvolvimento Web com PHP - Aula 1
Desenvolvimento Web com PHP - Aula 1
 

Semelhante a Desenvolvendo um buscador de cursos superior com PHP e Elasticsearch

TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...tdc-globalcode
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Thiago Barradas
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPLuiz Henrique Zambom Santana
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixAndré Déo
 
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)Erisvaldo Junior
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONAmbiente Livre
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 
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
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webRafael Nunes
 
Avançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticAvançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticRoberto Alves
 
Um passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresUm passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresComunidade NetPonto
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 

Semelhante a Desenvolvendo um buscador de cursos superior com PHP e Elasticsearch (20)

Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
TDC2017 | São Paulo - Trilha NOSQL How we figured out we had a SRE team at - ...
 
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
Palestra Elasticsearch - The Developers Conference - São Paulo - 2017
 
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
 
Construindo um Data Lake na AWS
Construindo um Data Lake na AWSConstruindo um Data Lake na AWS
Construindo um Data Lake na AWS
 
Novidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHPNovidades do elasticsearch 2.0 e como usá-lo com PHP
Novidades do elasticsearch 2.0 e como usá-lo com PHP
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
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
ElasticsearchElasticsearch
Elasticsearch
 
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)
Desenvolvimento de Apps e Games para Android - Partes 6 e 7 (Preview)
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Palestra
PalestraPalestra
Palestra
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
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...
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Bigadata casese opotunidades
Bigadata casese opotunidadesBigadata casese opotunidades
Bigadata casese opotunidades
 
Avançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala ElasticAvançando em Queries no Elasticsearch - TDC Sala Elastic
Avançando em Queries no Elasticsearch - TDC Sala Elastic
 
Um passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry PiresUm passo em frente com o Entity Framework - Henrry Pires
Um passo em frente com o Entity Framework - Henrry Pires
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 

Mais de Tchelinux

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Tchelinux
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeTchelinux
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Tchelinux
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Tchelinux
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeTchelinux
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Tchelinux
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...Tchelinux
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeTchelinux
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeTchelinux
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...Tchelinux
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...Tchelinux
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Tchelinux
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.Tchelinux
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Tchelinux
 

Mais de Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

Desenvolvendo um buscador de cursos superior com PHP e Elasticsearch

  • 1. Desenvolvendo um buscador com PHP e Elasticsearch Fernando Silva @FernandoDebrand
  • 3. Visão Geral ◎ Comunidade ◎ Stack Open Source Elastic ◎ Elasticsearch ◉ Características ◉ Arquitetura ◉ Apache Lucene ◉ Cluster e Índice ◉ API RESTful / Clients ◎ Grandes projetos que usam ◎ Instalando e configurando ◎ Exemplos de utilização com PHP ◎ Ferramentas e frameworks
  • 10. Elasticsearch 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.
  • 11. Elasticsearch - Características ● Pesquisa e análise em tempo real ● Distribuída, 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
  • 13. O Apache Lucene, ou simplesmente Lucene, é um software de busca escrito em Java. É de código aberto (open source) da Apache Software Foundation, licenciado sob Apache 2 Open Source License. ● Escalável e de alto desempenho de indexação ○ Mais de 150GB/hora ● Poderoso, preciso e eficiente algoritmos de pesquisa ○ Classificação de pesquisa ○ Múltiplos índices ○ Permite atualização e pesquisa simultânea ● Multi-plataforma
  • 15. Existem alguns conceitos que são fundamentais para Elasticsearch. Entender esses conceitos desde o ínicio facilitará no processo de aprendizagem. ● Near Realtime (NRT) ● Cluster ● Node ● Index ● Type ● Document ● Shards & Replicas Conceitos Básicos
  • 16. Elasticsearch é uma plataforma de busca em tempo real, podendo ter uma pequena latência(normalmente um segundo). Near Realtime (NRT)
  • 17. Cluster é uma coleção de um ou mais nós (servidores) que juntos detém os seus dados inteiros e fornece recursos de indexação e pesquisa. Cluster
  • 18. Node é um servidor único que é parte do seu cluster, armazena seus dados, e participa da indexação e pesquisa. Node
  • 19. Um índice é um conjunto de documentos. Por exemplo, pode se ter um índice para dados de cliente, outro para catálogo de produtos. Index
  • 20. Dentro de um índice, você pode definir um ou mais tipos. Um tipo é uma categoria/partição lógica do seu índice. Type
  • 21. Fragmentos são utilizados quando se tem uma grande quantidade de documentos, possibilitando subdividir o seu índice em pedaços. Réplicas são importantes por duas principais razões: ● Permite dividir horizontalmente o volume de conteúdo ● Permite distribuir e paralelizar as operações, aumentando assim o desempenho Shards & Replicas
  • 24. Utiliza banco de dados não relacional (NoSQL), assim é armazenada entidades complexas no Elasticsearch, como documentos JSON estruturados. Todos os campos são indexados por padrão, e todos os índices podem ser usados em uma consulta, para retornar facilmente resultados complexos em uma velocidade incrível. Orientado a documentos
  • 25. { "curso": { "codigo": "69212", "nome": "ANÁLISE E DESENVOLVIMENTO DE SISTEMAS", "modalidade": "Educação Presencial", "grau": "Tecnológico", "enade": "3", "cpc": "3", "cc": "3", "periodicidade_integralizacao": "Semestral (6.0)", "carga_horaria_minima": "2232 horas", "vagas_autorizadas": "300", "coordenador": "GUILHERME BERTONI MACHADO", "situacao_funcionamento": "Em atividade", "endereco": "Rua Coronel Genuíno 130", "cep": "90010-150", "municipio": "Porto Alegre", "uf": "RS" } } Orientado a documentos
  • 26. API RESTful / Clients
  • 27. API RESTful Elasticsearch disponibiliza uma API. Quase que qualquer ação pode ser executada usando API RESTful, usando JSON através de HTTP. Bibliotecas Client estão disponíveis para várias linguagens de programação.
  • 28. Clients ● Java API ● Java REST Client ● JavaScript API ● Groovy API ● .NET API ● PHP API ● Perl API ● Python API ● Ruby API ● E mais clients desenvolvidos pela comunidade
  • 30. Terminologias Elasticsearch MySQL Index Database Type Table Document Row Field Column Mapping Schema Shard Partition
  • 32. Grandes projetos que usam Elasticsearch
  • 33. Message Analytics, armazena dados de todos os canais de comunicação. Cases Busca de notícias, vídeos e fotos, com mais 180 consultas por segundo. Servindo 4 milhões de vendedores, com garantia de escalabilidade. https://www.elastic.co/use-cases Indexação de mais de 8 milhões de repositórios. 24 mil pesquisas por segundos no MSN e utilizados em outros produtos como, Listening Social e Azure Search. Já utiliza a 3 anos, para mais de 40 ferramentas, com mais de 60 milhões de consultas por dia.
  • 34. O que já vimos até aqui ◎ Comunidade ◎ Stack Elastic ◎ Elasticsearch ◉ Características ◉ Arquitetura ◉ Apache Lucene ◉ Cluster e Índice ◉ API RESTful / Clients ◎ Grandes projetos que usam ◎ Instalando e configurando ◎ Exemplos de utilização com PHP ◎ Ferramentas e frameworks
  • 36. Instalação Faz o download em https://www.elastic.co/downloads/elasticsearch, descompactar o zip. Execute bin/elasticsearch em Unix ou bin/elasticsearch.bat no Windows. Teste executando: $ curl -i -XGET 'localhost:9200/' https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
  • 38. Utilizando Docker Baixe a imagem e executa o container: $ docker run -d -p 9200:9200 -p 9300:9300 elasticsearch Testa se o Elasticsearch está executando: $ curl -i -XGET 'localhost:9200/' https://store.docker.com/images/elasticsearch
  • 40. Instalando Pacote Elasticsearch para PHP Crie um diretório “elastic_php”, cria um arquivo composer.json com o seguinte conteúdo. { "require": { "elasticsearch/elasticsearch": "~5.0" } } $ composer install
  • 41. Conectando Elasticsearch com PHP Crie um arquivo index.php dentro do diretório “elastic_php” e adicione o seguinte código. <?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->build(); if ($client) { echo 'conectado'; }
  • 42. Indexação de dados no Elasticsearch Já estamos conectados ao Elasticsearch. Vamos criar um índice com alguns dados. <?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::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'];
  • 43. Obtendo dados do Elasticsearch Já temos um índice criado, vamos obter os dados a partir dele. <?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->build(); $params = [ 'index' => 'meu_indice', 'type' => 'meu_tipo', 'id' => 'meu_id2', ]; $response = $client->get($params); echo $response['_source']['primeiro_campo'];
  • 44. Pesquisando em Elasticsearch <?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->build(); $params = [ 'index' => 'meu_indice', 'type' => 'meu_tipo', 'body' => [ 'query' => [ 'match' => [ 'primeiro_campo' => 'meu primeiro campo' ], ], ], ];
  • 45. Pesquisando em Elasticsearch $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_campo'] . "<br>"; } https://medium.com/@FernandoDebrand/utilizando-elasticsearch-com-php-8aba29d8d024
  • 48. Objetivos Sistema web para possibilitar o planejamento acadêmico, através da centralização de informações sobre cursos, podendo assim auxiliar os futuros acadêmicos em suas escolhas.
  • 52. Web Crawler Web Crawler, é um robô que navega sistematicamente por páginas web com o motivo de fazer indexação.
  • 54. Web Crawler - CAPTCHA
  • 56. JSON - Índice { "instituicao": { "codigo": "3804", "nome": " FACULDADE SENAC PORTO ALEGRE - FSPOA - SENAC/RS", "endereco": "Rua Coronel Genuíno", "numero": "130", "complemento": "", "cep": "90010-150 ", "bairro": "Centro", "municipio": "Porto Alegre", "uf": "RS", "telefone": "(051) 3284 1900", "fax": "(051) 3284 1902", "organizacao_academica": "Faculdade", "site": "www.senacrs.com.br", "categoria_administrativa": "Privada sem fins lucrativos", "email": "ikaspary@senacrs.com.br ", "ci_conceito_institucional": { "valor": "3", "ano": "2014" }, "igc_indice_geral_cursos": { "valor": "3", "ano": "2014" }, "igc_continuo": { "valor": "2.6664", "ano": "2014" } },
  • 57. JSON - Índice "curso": { "codigo": "69212", "nome": "ANÁLISE E DESENVOLVIMENTO DE SISTEMAS", "modalidade": "Educação Presencial", "grau": "Tecnológico", "enade": "3", "cpc": "3", "cc": "3", "data_inicio_funcionamento": "05/04/2004", "periodicidade_integralizacao": "Semestral (6.0)", "carga_horaria_minima": "2232 horas", "vagas_autorizadas": "300", "coordenador": "GUILHERME BERTONI MACHADO", "situacao_funcionamento": "Em atividade", "endereco": "Rua Coronel Genuíno 130", "cep": "90010-150", "municipio": "Porto Alegre", "uf": "RS" } }
  • 61. Home Buscador Possibilidade de buscar por nome de curso ou instituição.
  • 62. Busca Avançada Possibilidade de buscar por nome, grau e modalidade de curso e nome, município e UF da instituição.
  • 63.
  • 68. Referências/Links ◎ Client Elasticsearch-PHP (https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index. html) ◎ Client Elasticsearch (https://www.elastic.co/guide/en/elasticsearch/client/index.html) ◎ Guia Elasticsearch (https://www.elastic.co/guide/en/elasticsearch/guide/current/index.html) ◎ Guia Elastic Stack (https://www.elastic.co/guide/index.html) ◎ DomCrawler (https://symfony.com/doc/current/components/dom_crawler.html) ◎ Laravel and Elasticsearch (https://laravel-news.com/laravel-and-elasticsearch) ◎ Utilizando Elasticsearch com PHP (https://medium.com/@FernandoDebrand/utilizando-elasticsearch-com-php- 8aba29d8d024)