Turbinando sua aplicação com Lucene, Solr e Hibernate Search
1. Turbinando sua aplicação com Lucene
Solr & Hibernate Search
Paulo César M. Jeveaux - @jeveaux
paulo.jeveaux@giran.com.br
sábado, 19 de setembro de 2009
2. Jeveaux
• CEO da Giran
• Desenvolvedor Java há 8++ anos
• Fundador do ESJUG e Agile-ES
• Administrador do PortalJava.com
• Palestrante e evangelista Java
• Entusiasta Ruby, Rails, Python e Agile
• Curioso e estudando Erlang
sábado, 19 de setembro de 2009
3. Giran Soluções e Ensino
• Consultoria e Treinamento especialidados
• Java
• Ruby on Rails
• Desenvolvimento ágil
• Gerenciamento de projetos com SCRUM
• Profissionais altamente qualificados
• Participação ativa na comunidade
• http://www.giran.com.br
sábado, 19 de setembro de 2009
4. Giran Soluções e Ensino
• Consultoria e Treinamento especialidados
• Java
• Ruby on Rails
• Desenvolvimento ágil
• Gerenciamento de projetos com SCRUM
• Profissionais altamente qualificados
• Participação ativa na comunidade
• http://www.giran.com.br
sábado, 19 de setembro de 2009
5. Giran Soluções e Ensino
• Consultoria e Treinamento especialidados
• Java
• Ruby on Rails
• Desenvolvimento ágil
• Gerenciamento de projetos com SCRUM
• Profissionais altamente qualificados
• Participação ativa na comunidade
• http://www.giran.com.br
sábado, 19 de setembro de 2009
6. Sobre o que vamos
falar hoje...
sábado, 19 de setembro de 2009
16. monta um índice
FAZ responde a pesquisas
baseando-se neste índice
sábado, 19 de setembro de 2009
17. monta um índice
FAZ responde a pesquisas
baseando-se neste índice
Search Software?
Eu faço LIKE
direto no banco de dados
sábado, 19 de setembro de 2009
19. OFERECE
relevância
sábado, 19 de setembro de 2009
20. OFERECE
relevância
escalabilidade
sábado, 19 de setembro de 2009
21. OFERECE
relevância
escalabilidade
integração com diversas fontes
de dados
sábado, 19 de setembro de 2009
22. baseado em palavras
não em substrings
carro OU automóvel
auto != automóvel
má OU macho
sábado, 19 de setembro de 2009
23. baseado em palavras
não em substrings
carro OU automóvel
auto != automóvel
má OU macho talvez aqui no Ceará não ;-)
sábado, 19 de setembro de 2009
24. baseado em palavras
não em substrings
carro OU automóvel
auto != automóvel
má OU macho talvez aqui no Ceará não ;-)
e agora!?
como fazer no banco de dados?
sábado, 19 de setembro de 2009
32. Lucene Java
Solr
sábado, 19 de setembro de 2009
33. Mahout PyLucene
Lucene Java desde 2000
Lucy
Tika
Solr Lucene.Net
Open Relevance Nutch
Project
Droids
sábado, 19 de setembro de 2009
34. Lucene Java
indexação e pesquisa
java 1.4++
nenhuma dependência, nenhuma!
qualquer coisa é um documento
sábado, 19 de setembro de 2009
35. Lucene Java
indexação e pesquisa
java 1.4++
nenhuma dependência, nenhuma!
qualquer coisa é um documento
{ }
fields
fields
fields
sábado, 19 de setembro de 2009
36. Lucene Features
indexação e pesquisa bastante rápidas
query syntax simples e poderosa
ordenação por relevância ou por campos (fields)
comunidade grande e ativa
Apache License 2.0
sábado, 19 de setembro de 2009
37. Lucene Query Syntax
cejug
“cejug”
*jug
café AND tapioca
café OR tapioca
café NOT tapioca
jug:cejug
sábado, 19 de setembro de 2009
38. Lucene Query Syntax
cejug
“cejug”
*jug
café AND tapioca +café +tapioca
café OR tapioca
café NOT tapioca
jug:cejug
sábado, 19 de setembro de 2009
39. Lucene Query Syntax
cejug
“cejug”
*jug
café AND tapioca +café +tapioca
café OR tapioca
café NOT tapioca +café -tapioca
jug:cejug
sábado, 19 de setembro de 2009
40. Lucene Features++
normalização de textos (Analyzer)
normalização linguística
lowercase
stopwords
tokenizer
sábado, 19 de setembro de 2009
41. Lucene Features++
normalização de textos (Analyzer)
normalização linguística guri => menino
lowercase
stopwords
tokenizer
sábado, 19 de setembro de 2009
42. Lucene Features++
normalização de textos (Analyzer)
normalização linguística guri => menino
lowercase
stopwords a, e, ou, para, de, etc ...
tokenizer
sábado, 19 de setembro de 2009
43. Lucene Features++
normalização de textos (Analyzer)
normalização linguística guri => menino
lowercase
stopwords a, e, ou, para, de, etc ...
tokenizer ce-jug: java => ce, jug, java, cejug
sábado, 19 de setembro de 2009
44. Lucene Features++
normalização de textos (Analyzer)
normalização linguística guri => menino
má => macho
lowercase
stopwords a, e, ou, para, de, etc ...
tokenizer ce-jug: java => ce, jug, java, cejug
sábado, 19 de setembro de 2009
45. Lucene Features++
Fuzzy search
distância de levenshtein
“ceará java ~ 0.75”
Proximidade
“ceará java” ~ 5
sábado, 19 de setembro de 2009
46. aprendendo
o básico
sábado, 19 de setembro de 2009
47. aprendendo
o básico
1. INDEXAR
sábado, 19 de setembro de 2009
48. aprendendo
o básico
1. INDEXAR
sábado, 19 de setembro de 2009
49. aprendendo
o básico
1. INDEXAR
2. PESQUISAR
sábado, 19 de setembro de 2009
50. index
1. crie um documento
a. adicione os fields
2. adicione o documento
ao index
3. o indexador irá analisar
o documento e atualizar
o index
sábado, 19 de setembro de 2009
51. index search
1. crie um documento 1. crie uma query
a. adicione os fields
2. abra um index
2. adicione o documento
ao index 3. pesquise no index
3. o indexador irá analisar 4. itere no resultado e
o documento e atualizar exiba-o
o index
sábado, 19 de setembro de 2009
60. caching replicação
XML
JSON
alta
performance administração
amigável
full-text
search Solr
sábado, 19 de setembro de 2009
61. Solr
servidor web de indexação e pesquisa
java 1.5++
possui o lucene em seu core
sábado, 19 de setembro de 2009
62. Solr Features
interface web de administração
otimizações para alta performance e muito tráfego
suporta caching e replication
XML/HTTP e JSON API
faceted search
hit highlighting
sábado, 19 de setembro de 2009
65. o melhor de
dois mundos?
sábado, 19 de setembro de 2009
66. talvez!
o melhor de
dois mundos?
sábado, 19 de setembro de 2009
67. Hibernate Search Features
hibernate core + JPA
baseado em anotações
indexação baseada em eventos (transparente)
integração com seu modelo
sábado, 19 de setembro de 2009
68. Hibernate Search Features
hibernate core + JPA + lucene
baseado em anotações
indexação baseada em eventos (transparente)
integração com seu modelo
sábado, 19 de setembro de 2009
69. Hibernate Search Features
elimina a conversão para documentos
mantém seu índice atualizado
depende do hibernate core e annotations
também possui integração com Solr
amigável com soluções JBoss*
sábado, 19 de setembro de 2009
71. Conclusões
lucene
indexação e pesquisa
rápido e poderoso
simples e leve
sem dependências
não possui webcrawlers ou parsers
sábado, 19 de setembro de 2009
72. Conclusões
solr
servidor de indexação e pesquisa
Restful API (HTTP e XML)
cliente não precisa ser Java
administração fácil via web
construído sobre o lucene
sábado, 19 de setembro de 2009
73. Conclusões
hibernate search
integração com seu modelo de dados
sem manipulação direta de documentos
sincronização transparente do index
dependência do hibernate
sábado, 19 de setembro de 2009
78. Obrigado!
http://www.cejug.org
sábado, 19 de setembro de 2009
79. Turbinando sua aplicação com Lucene
Solr & Hibernate Search
Paulo César M. Jeveaux - @jeveaux
paulo.jeveaux@giran.com.br
sábado, 19 de setembro de 2009