SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
Busca Textual com Elasticsearch
Um caso de uso prático
Adam Brandizzi
Engenheiro de Software pela
Liferay Inc.
Programador profissional
desde 2006.
O que é
Plataforma de Portais Web.
Imagem: http://tinyurl.com/y257vmjr
)
Um portal suporta várias aplicações, chamadas
portlets, que podem inclusive estar na mesma
página web.
Imagem: http://tinyurl.com/y5lvry7l
Portlets em Liferay
●
CMS
●
Blog
●
Wiki
●
Fóruns
●
Calendário
●
Formulários
●
Workflow
●
E-commerce
●
Análise de uso
●
Audience
Targeting
Qualquer coisa que o desenvolvedor quiser criar
Mas… qual aplicativo é profundamente
fundamental em todos os portais?
BUSCA
http://tinyurl.com/yylophwp
E é aí que o bicho pega.
http://tinyurl.com/y24rgohn
SQL? Imagine o tamanho da query!
Liferay roda em clusters
http://tinyurl.com/y2m6dzyj
Até que surgiu...
Elasticsearch é banco de dados
NoSQL extremamente escalável e
distribuído baseado em Lucene e
especialmente útil para busca textual,
data analysis e big data.
Por que mudar para Elasticsearch?
●
Lucene é uma biblioteca de baixo nível
●
Clusterização e balanceamento já incluso
●
Nos livramos de toneladas de código
●
Muito mais flexível
●
Padrão do mercado
Índice
Tipo
key1: value1
key2: value2
Documento
Índice
Tipo
key1: value1
key2: value2
Documento
Documento
Tipo
key1: value1
key2: value2
Documento
key1: value1
key2: value2
Índice
Tipo
key1: value1
key2: value2
Documento
Documento
key1: value1
key2: value2
Modelo de dados do Elasticsearch
Banco de dados Índice
Tabela Tipo
Linha Documento
Coluna Campo
ARQUITETURA
http://tinyurl.com/y3axof4p
http://tinyurl.com/y3axof4p
Primeiro Desafio
Qual a estrutura do índice?
http://tinyurl.com/y49svs3a
O que fizemos
●
Uma instância do portal possui um único índice
●
Esses índices contém o tipo
LiferayDocumentType
●
Todas as entidades devem ser adicionadas ao
mesmo documento
Blog
content
Blog title
Wiki
content
Wiki title
WCM
content
WCM title
Forum
body
Forum title
content
title
Primeira Lição
Várias tipos de entidades da aplicação viram
um tipo de documento no Elasticsearch
http://tinyurl.com/y3oycjmx
Segundo Desafio
Como indexar e buscar?
http://tinyurl.com/y49svs3a
Como adicionar documentos?
●
Indexer API
– Cada entidade tem um indexador
– Um indexador é um bean que implementa
Indexer
– O indexador retorna um objeto Document
– A infraestrutura salva esse documento
Como recuperar documentos
●
Searcher API
– Toda busca contém uma query ENORME
– Cada entidade possui um buscador
– Um buscador é um bean que implementa Searcher
– O buscador adiciona campos a serem buscados na
query
Segunda Lição
Crie uma “camada de persistência” entre
Elasticsearch e as diversas aplicações
http://tinyurl.com/y3gh5o97
Terceiro Desafio
Como lidar com idiomas?
http://tinyurl.com/y4ycg2ex
Primeira tentativa
●
Idiomas diferntes têm comportamentos diferentes
●
Resultados apenas no “idioma do usuário”
●
Problemas
– Qual o idioma do usuário?
●
“Display locale”
– Qual o idioma do conteúdo?
●
“Site default locale”
Primeira tentativa
Não funcionou: usuários pediram para mudar.
Segunda tentativa
●
Estamos trabalhando ainda
●
Conteúdo é procurado em todos os idiomas
disponíveis no portal
●
Mas… como adotar todos os comportamentos?
Use múltiplos campos com múltiplos
analizadores
Terceira Lição
Quarto Desafio
Como filtrar por facets?
http://tinyurl.com/y679yzsc
Novo Desafio: Facets
●
Uma demanda comum são facets
– Filtros para uma busca já executada
●
Problema: filtrar por tags e categorias
– Tags e categorias são palavras buscáveis
– Mas também são bases de filtragem
● Para pesquisar, usamos campos do tipo text
● Para filtrar, usamos campos do tipo keyword
Use o mesmo valor em múltiplos campos com
múltiplos tipos
Quarta Lição
Espalhe
Seja redundante
Reinterprete
DESNORMALIZE
Mudança de paradigma
Alguns anúncios
Liferay Portal Liferay DXP Liferay DXP Cloud
liferay.com
portal.liferay.dev
liferay.com/careers
meetup.com/pt-BR/topics/elasticsearch
Obrigado!
adam.brandizzi.com.br
adam@brandizzi.com.br
adam.brandizzi@liferay.com
linkedin.com/in/brandizzi
twitter.com/adambrandizzi

Mais conteúdo relacionado

Semelhante a Busca Textual com Elasticsearch

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyantonio sérgio nogueira
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Luís Cobucci
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)Flávio Lisboa
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Html web denise_lima
Html web denise_limaHtml web denise_lima
Html web denise_limaDenise Lima
 
Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011Luís Cobucci
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Pythonantonio sérgio nogueira
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma AndroidÉdipo Souza
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?Fabio Janiszevski
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014Fernando Boaglio
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaCleber Dantas
 

Semelhante a Busca Textual com Elasticsearch (20)

Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPyDesenvolvendo uma Aplicação WEB usando o Python e o CherryPy
Desenvolvendo uma Aplicação WEB usando o Python e o CherryPy
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Html web denise_lima
Html web denise_limaHtml web denise_lima
Html web denise_lima
 
Marcadores semânticos: usá-los ou usá-los
Marcadores semânticos: usá-los ou usá-losMarcadores semânticos: usá-los ou usá-los
Marcadores semânticos: usá-los ou usá-los
 
Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Python
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma Android
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Php
PhpPhp
Php
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014
 
Python Zope Plone - Ftec
Python Zope Plone - FtecPython Zope Plone - Ftec
Python Zope Plone - Ftec
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 

Mais de Adam Victor Brandizzi

Mais de Adam Victor Brandizzi (6)

Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Learning to Rank
Learning to RankLearning to Rank
Learning to Rank
 
Issue Trackers para Programadores
Issue Trackers para ProgramadoresIssue Trackers para Programadores
Issue Trackers para Programadores
 
Dates, Times and Time Zones
Dates, Times and Time ZonesDates, Times and Time Zones
Dates, Times and Time Zones
 
Shell Script
Shell ScriptShell Script
Shell Script
 
Haskell
HaskellHaskell
Haskell
 

Busca Textual com Elasticsearch