Um portal construído com Liferay possui mais de 250 tabelas SQL, além de diversas bases de dados customizadas por nossos clientes. Usuários, porém, precisam de uma busca textual simples. Veja como Elasticsearch nos ajudou a superar esse desafio ao prover uma engine de busca textual centralizada, rápida e mais customizável.
16. Salvação da Lavoura
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.
http://tinyurl.com/y3zya9ua
17. 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
18. Í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
19. Banco de dados Índice
Tabela Tipo
Linha Documento
Coluna Campo
22. 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
26. 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
27.
28.
29. 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
30.
31.
32.
33. Segunda Lição
Crie uma “camada de persistência” entre
Elasticsearch e as diversas aplicações
http://tinyurl.com/y3gh5o97
35. 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”
46. 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
47.
48. Use o mesmo valor em múltiplos campos com
múltiplos tipos
Quarta Lição