SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
Centenas de Entidades
Uma Única Pesquisa
Busca Textual com Elasticsearch
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
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 de busca 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 em portais Liferay

Desenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoDesenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoMatheus Pereira
 
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
 
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
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPLorranna Machado
 
Artigo de php
Artigo de phpArtigo de php
Artigo de phprobson
 
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
 
Apresentação sobre Drupal
Apresentação sobre DrupalApresentação sobre Drupal
Apresentação sobre DrupalWebdrop
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014Fernando Boaglio
 
Aplicações Web com XML e AJAX
Aplicações Web com XML e AJAXAplicações Web com XML e AJAX
Aplicações Web com XML e AJAXManuel Lemos
 
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
 
Portais Corporativos e Gestao de Conteudo
Portais Corporativos e Gestao de ConteudoPortais Corporativos e Gestao de Conteudo
Portais Corporativos e Gestao de ConteudoRicardo Martins Neves
 

Semelhante a Busca textual com Elasticsearch em portais Liferay (20)

Desenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoDesenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e Django
 
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
 
Python Zope Plone - Ftec
Python Zope Plone - FtecPython Zope Plone - Ftec
Python Zope Plone - Ftec
 
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
 
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)
 
Web Tools Pt Br
Web Tools Pt BrWeb Tools Pt Br
Web Tools Pt Br
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Apresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHPApresentação da Linguagem de Programação PHP
Apresentação da Linguagem de Programação PHP
 
I C O X
I C O XI C O X
I C O X
 
Artigo de php
Artigo de phpArtigo de php
Artigo de php
 
Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011Qualidade em projetos PHP - SoLiSC 2011
Qualidade em projetos PHP - SoLiSC 2011
 
Apresentação sobre Drupal
Apresentação sobre DrupalApresentação sobre Drupal
Apresentação sobre Drupal
 
Web Crawlers
Web CrawlersWeb Crawlers
Web Crawlers
 
MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014MongoDB e OpenShift - JUDCon2014
MongoDB e OpenShift - JUDCon2014
 
Aplicações Web com XML e AJAX
Aplicações Web com XML e AJAXAplicações Web com XML e AJAX
Aplicações Web com XML e AJAX
 
Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011Qualidade em projetos PHP - TDC 2011
Qualidade em projetos PHP - TDC 2011
 
Php
PhpPhp
Php
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Web open source
Web open sourceWeb open source
Web open source
 
Portais Corporativos e Gestao de Conteudo
Portais Corporativos e Gestao de ConteudoPortais Corporativos e Gestao de Conteudo
Portais Corporativos e Gestao de Conteudo
 

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 em portais Liferay