SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Desenvolvendo um buscador com
PHP e Elasticsearch
Fernando Silva
@FernandoDebrand
Sobre mim!
Eu sou Fernando Silva
Analista de Desenvolvimento
Visão Geral
◎ 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
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,
descompacta 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://hub.docker.com/_/elasticsearch/
E o PHP?
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": "~2.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_indice',
'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 campos'] . "<br>";
}
https://gist.github.com/fernandodebrando/030445cc05b862086ca706150f049e13
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.
Solução
Sistema de acesso público que facilite a
busca de cursos e instituições registradas
no MEC, podendo visualizar informações
dos cursos e efetuar comparação.
Solução
Arquitetura
Arquitetura
Arquitetura
Web Crawler
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
◎ Client Elasticsearch-PHP
(https://www.elastic.co/guide/en/elasticsearch/client/php-api/curren
t/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)
Obrigado!
Alguma pergunta?
Você pode me encontrar em @FernandoDebrand.
Apresentação em: https://speakerdeck.com/fernandodebrando.
Participe da comunidade PHPRS.
phprs.com.br
rselephants
@phprs
phprs.slack.com
meetup.com/php-rs
PHPinga Pós TDC
A partir das 19hs
Malvadeza Pub
Tv. do Carmo, 76 - Cidade Baixa,
Porto Alegre - RS

Más contenido relacionado

La actualidad más candente

La actualidad más candente (6)

JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
 
"Hacking+PHP"
"Hacking+PHP""Hacking+PHP"
"Hacking+PHP"
 
Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2Proteja sua aplicação com o zend framework 2
Proteja sua aplicação com o zend framework 2
 
Seja um ninja em AWS IAM
Seja um ninja em AWS IAMSeja um ninja em AWS IAM
Seja um ninja em AWS IAM
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
Segurança & Ruby on Rails
Segurança & Ruby on RailsSegurança & Ruby on Rails
Segurança & Ruby on Rails
 

Destacado

Destacado (20)

JWT Authentication with AngularJS
JWT Authentication with AngularJSJWT Authentication with AngularJS
JWT Authentication with AngularJS
 
Bigdata na pratica: Resolvendo problemas de performance com hadoop
Bigdata na pratica: Resolvendo problemas de performance com hadoopBigdata na pratica: Resolvendo problemas de performance com hadoop
Bigdata na pratica: Resolvendo problemas de performance com hadoop
 
Social Miner: Webinar people marketing em 30 min
Social Miner: Webinar people marketing em 30 minSocial Miner: Webinar people marketing em 30 min
Social Miner: Webinar people marketing em 30 min
 
Token Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJSToken Based Authentication Systems with AngularJS & NodeJS
Token Based Authentication Systems with AngularJS & NodeJS
 
Elasticsearch de dentro para fora
Elasticsearch de dentro para foraElasticsearch de dentro para fora
Elasticsearch de dentro para fora
 
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-PatternsTDC2016POA | Trilha DevOps - DevOps Anti-Patterns
TDC2016POA | Trilha DevOps - DevOps Anti-Patterns
 
TDC2016POA | Trilha DevOps - Monitoramento real-time com ELK
TDC2016POA | Trilha DevOps - Monitoramento real-time com ELKTDC2016POA | Trilha DevOps - Monitoramento real-time com ELK
TDC2016POA | Trilha DevOps - Monitoramento real-time com ELK
 
TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...
TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...
TDC2016POA | Trilha DevOps - Monitoramento da infraestrutura para aplicac?o?e...
 
TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!
TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!
TDC2016POA | Trilha DevOps - Métricas, métricas para todos os lados!
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoTTDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
TDC2016POA | Trilha Android - Firebase Cloud Messaging para Android e IoT
 
TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?
TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?	TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?
TDC2016POA | Trilha Dinamica - Facilitação - Que momento o grupo se encontra?
 
TDC2016POA | Trilha Arduino - A Prática do Arduino em Ensino: o Case de um La...
TDC2016POA | Trilha Arduino - A Prática do Arduino em Ensino: o Case de um La...TDC2016POA | Trilha Arduino - A Prática do Arduino em Ensino: o Case de um La...
TDC2016POA | Trilha Arduino - A Prática do Arduino em Ensino: o Case de um La...
 
TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...
TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...
TDC2016POA | Trilha Android - Monetização: conheça a rede de anúncios que pag...
 
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
TDC2016POA | Trilha DevOps - Gestão de ciclo de vida de banco de dados: Já pa...
 
TDC2016POA | Trilha Dinamica - Desenvolvimento de Ideias através de Brainwriting
TDC2016POA | Trilha Dinamica - Desenvolvimento de Ideias através de BrainwritingTDC2016POA | Trilha Dinamica - Desenvolvimento de Ideias através de Brainwriting
TDC2016POA | Trilha Dinamica - Desenvolvimento de Ideias através de Brainwriting
 
TDC2016POA | Trilha Dinamicas - Valores individuais e de sua equipe?
TDC2016POA | Trilha Dinamicas - Valores individuais e de sua equipe?TDC2016POA | Trilha Dinamicas - Valores individuais e de sua equipe?
TDC2016POA | Trilha Dinamicas - Valores individuais e de sua equipe?
 
TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...
TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...
TDC 2016 |Trilha DevOps - Dissecando e entendendo pipelines de entrega de sof...
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 
TDC2016POA | Trilha Android - Construa um app consciente com a Google Awarene...
TDC2016POA | Trilha Android - Construa um app consciente com a Google Awarene...TDC2016POA | Trilha Android - Construa um app consciente com a Google Awarene...
TDC2016POA | Trilha Android - Construa um app consciente com a Google Awarene...
 

Similar a TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e 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)
Erisvaldo Junior
 

Similar a TDC2016POA | Trilha PHP - Desenvolvendo um buscador 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
 
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
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Construindo um Data Lake na AWS
Construindo um Data Lake na AWSConstruindo um Data Lake na AWS
Construindo um Data Lake na AWS
 
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
 
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)
 
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
 
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
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Palestra
PalestraPalestra
Palestra
 
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
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
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...
 
Fluent NHibernate - Baby Steps
Fluent NHibernate - Baby StepsFluent NHibernate - Baby Steps
Fluent NHibernate - Baby Steps
 

Más de tdc-globalcode

Más de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
RavenaSales1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
FabianeMartins35
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
azulassessoria9
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
LeloIurk1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
edelon1
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
LusGlissonGud
 

Último (20)

ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Historia da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdfHistoria da Arte europeia e não só. .pdf
Historia da Arte europeia e não só. .pdf
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdfApresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
Apresentação ISBET Jovem Aprendiz e Estágio 2023.pdf
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 

TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch

  • 1. Desenvolvendo um buscador com PHP e Elasticsearch Fernando Silva @FernandoDebrand
  • 2. Sobre mim! Eu sou Fernando Silva Analista de Desenvolvimento
  • 3. Visão Geral ◎ 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
  • 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, descompacta 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://hub.docker.com/_/elasticsearch/
  • 41. Instalando Pacote Elasticsearch para PHP Crie um diretório “elastic_php”, cria um arquivo composer.json com o seguinte conteúdo. { "require": { "elasticsearch/elasticsearch": "~2.0" } } $ composer install
  • 42. 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'; }
  • 43. 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'];
  • 44. 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'];
  • 45. Pesquisando em Elasticsearch <?php require 'vendor/autoload.php'; $client = ElasticsearchClientBuilder::create()->build(); $params = [ 'index' => 'meu_indice', 'type' => 'meu_indice', 'body' => [ 'query' => [ 'match' => [ 'primeiro campo' => 'meu primeiro campo' ], ], ], ];
  • 46. 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 campos'] . "<br>"; } https://gist.github.com/fernandodebrando/030445cc05b862086ca706150f049e13
  • 49. 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.
  • 51. Sistema de acesso público que facilite a busca de cursos e instituições registradas no MEC, podendo visualizar informações dos cursos e efetuar comparação. Solução
  • 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 ◎ Client Elasticsearch-PHP (https://www.elastic.co/guide/en/elasticsearch/client/php-api/curren t/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)
  • 69. Obrigado! Alguma pergunta? Você pode me encontrar em @FernandoDebrand. Apresentação em: https://speakerdeck.com/fernandodebrando. Participe da comunidade PHPRS. phprs.com.br rselephants @phprs phprs.slack.com meetup.com/php-rs
  • 70. PHPinga Pós TDC A partir das 19hs Malvadeza Pub Tv. do Carmo, 76 - Cidade Baixa, Porto Alegre - RS