SlideShare uma empresa Scribd logo
1 de 28
http://netponto.org 5ª Reunião Presencial - 12/12/2009 Introdução ao Lucene.NetBruno Lopes
Bruno Lopes
o quê porquê como
o quê
Text Search Engine Mauris dapibus, mauris in pharetra auctor, sapien est feugiat metus, ac suscipit mi erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, et viverra sem eros aliquam libero.  Lorem ipsum dolor sit amet, consectetur adipiscing elit. imperdiet mattis placerat. Duis sagittis vehicula lacus, a mauris lectus ultrices sit amet.  Etiam viverra, erat eu vestibulum facilisis, mauris ligula dolor blandit sapien, et viverra sem eros aliquam libero.  Donec porta urna eget ipsum ullamcorper vitae consequat nunc pulvinar. Donec nec ligula sem.  Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec lectus dolor, facilisis non facilisis eget, vehicula eget odio. Mauris sed dui non tortor pellentesque condimentum vitae et purus.   Aliquam mauris vitae luctus arcu. Sed dignissim lorem hendrerit elit semper tristique. Ut et augue suscipit velit sodales bibendum.  Class aptent taciti sociosquad litora torquent per conubia nostra, per inceptos himenaeos. Sed blandit magna leo.  Metus dapibus, mauris in pharetra auctor, sapien est feugiat, ac suscipit mi erat nec leo.  Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Mauris dapibus, pharetra auctor, sapien est feugiat metus, ac suscipit mi erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, mauris  et viverra sem eros aliquam libero.  Mauris dapibus, mauris in pharetra auctor, sapien est feugiat metus, ac suscipit mi mauris erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, et viverra sem eros aliquam libero.  Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Nunc ut ultricies est. Nunc imperdiet libero a vulputate. Donec lectus dolor, facilisis non facilisis eget, vehicula eget odio. Morbi sed dui non tortor pellentesque condimentum vitae et purus.
Base Ports Nutch Lucene.net Solr PyLucene Alternativas SQL Server FTS Xapian Ferret
Porquê?
Problema “história de portugal”
Como?
Entidades Document IndexWriter Index Indexing
User Query QueryParser Query Index IndexSearcher Search Results Searching
3 1 Field IndexWriter 2 Name Analyzer Value 7 Document 4 Options Field Field 5 6 Field Field Name Value Options Index Indexing
1 IndexWriter Index 2 IndexWriter Index Index IndexWriter 3 IndexWriter IndexWriter Index IndexWriter Index Index Indexing
2 1 QueryParser 4 User Query Query Analyzer Query Query Security Trimming 3 Machine Created Filters Query 5 6 Search Results IndexSearcher Results Score 7 DocId Document Index Field Field Field Indexing
Analyzers Isto é umafraseparamostrarcomofuncionamAnalisadores. tokenize Isto é mostrar frase para como funcionam Analisadores uma isto é mostrar frase para como funcionam analisadores uma lowercase Isto é mostrar frase para como funcionam analisadores filter stopwords reduce to stems ist é mostr fras  par como funcion analis
Indexação e Procura demonstração
? ? ? ? ? ? ?
Referências Lucene http://lucene.apache.org Lucene.net http://incubator.apache.org/lucene.net Luke http://www.getopt.org/luke Código-fontedestaapresentação http://github.com/brunomlopes
Patrocinadores desta reunião
Obrigado! Bruno Lopes brunomlopes@gmail.com http://brunomlopes.com http://twitter.com/brunomlopes

Mais conteúdo relacionado

Mais de Comunidade NetPonto

MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaComunidade NetPonto
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaComunidade NetPonto
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloComunidade NetPonto
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazComunidade NetPonto
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João JesusComunidade NetPonto
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsComunidade NetPonto
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpComunidade NetPonto
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosComunidade NetPonto
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoComunidade NetPonto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realComunidade NetPonto
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteComunidade NetPonto
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Comunidade NetPonto
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariComunidade NetPonto
 

Mais de Comunidade NetPonto (20)

MVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara SilvaMVVM Light e Cimbalino Toolkits - Sara Silva
MVVM Light e Cimbalino Toolkits - Sara Silva
 
Deep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo CostaDeep dive into Windows Azure Mobile Services - Ricardo Costa
Deep dive into Windows Azure Mobile Services - Ricardo Costa
 
The power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno CanceloThe power of templating.... with NVelocity - Nuno Cancelo
The power of templating.... with NVelocity - Nuno Cancelo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
NoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor TomazNoSQL em Windows Azure Table Storage - Vitor Tomaz
NoSQL em Windows Azure Table Storage - Vitor Tomaz
 
HTML5 - Pedro Rosa
HTML5 - Pedro RosaHTML5 - Pedro Rosa
HTML5 - Pedro Rosa
 
De Zero a Produção - João Jesus
De Zero a Produção - João JesusDe Zero a Produção - João Jesus
De Zero a Produção - João Jesus
 
OData – Super Cola W3
OData – Super Cola W3OData – Super Cola W3
OData – Super Cola W3
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Case studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store AppsCase studies about Layout & View States & Scale in Windows 8 Store Apps
Case studies about Layout & View States & Scale in Windows 8 Store Apps
 
Aspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharpAspect-oriented Programming (AOP) com PostSharp
Aspect-oriented Programming (AOP) com PostSharp
 
Utilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes UnitáriosUtilização de Mock Objects em Testes Unitários
Utilização de Mock Objects em Testes Unitários
 
Dinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de ProjectoDinâmica e Motivacao de Equipas de Projecto
Dinâmica e Motivacao de Equipas de Projecto
 
KnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida realKnockoutJS com ASP.NET MVC3: Utilização na vida real
KnockoutJS com ASP.NET MVC3: Utilização na vida real
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto ProieteWindows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
Windows 8: Desenvolvimento de Metro Style Apps - C. Augusto Proiete
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
Como não entalar os dedos nas janelas: Finger-based apps no Windows 8
 
Sessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto FerrariSessão Especial: PowerPivot com Alberto Ferrari
Sessão Especial: PowerPivot com Alberto Ferrari
 

Introdução ao Lucene.net

  • 1. http://netponto.org 5ª Reunião Presencial - 12/12/2009 Introdução ao Lucene.NetBruno Lopes
  • 4.
  • 6. Text Search Engine Mauris dapibus, mauris in pharetra auctor, sapien est feugiat metus, ac suscipit mi erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, et viverra sem eros aliquam libero. Lorem ipsum dolor sit amet, consectetur adipiscing elit. imperdiet mattis placerat. Duis sagittis vehicula lacus, a mauris lectus ultrices sit amet. Etiam viverra, erat eu vestibulum facilisis, mauris ligula dolor blandit sapien, et viverra sem eros aliquam libero. Donec porta urna eget ipsum ullamcorper vitae consequat nunc pulvinar. Donec nec ligula sem. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec lectus dolor, facilisis non facilisis eget, vehicula eget odio. Mauris sed dui non tortor pellentesque condimentum vitae et purus. Aliquam mauris vitae luctus arcu. Sed dignissim lorem hendrerit elit semper tristique. Ut et augue suscipit velit sodales bibendum. Class aptent taciti sociosquad litora torquent per conubia nostra, per inceptos himenaeos. Sed blandit magna leo. Metus dapibus, mauris in pharetra auctor, sapien est feugiat, ac suscipit mi erat nec leo. Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Mauris dapibus, pharetra auctor, sapien est feugiat metus, ac suscipit mi erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, mauris et viverra sem eros aliquam libero. Mauris dapibus, mauris in pharetra auctor, sapien est feugiat metus, ac suscipit mi mauris erat nec leo. Etiam viverra, erat eu vestibulum facilisis, ligula dolor blandit sapien, et viverra sem eros aliquam libero. Nunc ut mauris est. Nunc imperdiet ultricies libero a vulputate. Nunc ut ultricies est. Nunc imperdiet libero a vulputate. Donec lectus dolor, facilisis non facilisis eget, vehicula eget odio. Morbi sed dui non tortor pellentesque condimentum vitae et purus.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. Base Ports Nutch Lucene.net Solr PyLucene Alternativas SQL Server FTS Xapian Ferret
  • 14.
  • 15. Como?
  • 16.
  • 18. User Query QueryParser Query Index IndexSearcher Search Results Searching
  • 19. 3 1 Field IndexWriter 2 Name Analyzer Value 7 Document 4 Options Field Field 5 6 Field Field Name Value Options Index Indexing
  • 20. 1 IndexWriter Index 2 IndexWriter Index Index IndexWriter 3 IndexWriter IndexWriter Index IndexWriter Index Index Indexing
  • 21. 2 1 QueryParser 4 User Query Query Analyzer Query Query Security Trimming 3 Machine Created Filters Query 5 6 Search Results IndexSearcher Results Score 7 DocId Document Index Field Field Field Indexing
  • 22. Analyzers Isto é umafraseparamostrarcomofuncionamAnalisadores. tokenize Isto é mostrar frase para como funcionam Analisadores uma isto é mostrar frase para como funcionam analisadores uma lowercase Isto é mostrar frase para como funcionam analisadores filter stopwords reduce to stems ist é mostr fras par como funcion analis
  • 23. Indexação e Procura demonstração
  • 24.
  • 25. ? ? ? ? ? ? ?
  • 26. Referências Lucene http://lucene.apache.org Lucene.net http://incubator.apache.org/lucene.net Luke http://www.getopt.org/luke Código-fontedestaapresentação http://github.com/brunomlopes
  • 28. Obrigado! Bruno Lopes brunomlopes@gmail.com http://brunomlopes.com http://twitter.com/brunomlopes
  • 29. Nutch Solr Lucene.Net Usam como base Ports Lucene PyLucene inspirou Alternativas Xapian Ferret SQLServer FTS

Notas do Editor

  1. Apresentação tem 3 fases, mais uma fase final de demo
  2. MotivaçãoEuquerocontribuirpara um mundolivredestasabominaçõesIsto é o queaconteceqnd se tentafazer textual search sobre bases de dados
  3. Web Text Search engines
  4. Verdade, nós não trabalhamos (todos) no google, no bing, no yahooMas fazemos CMS...Fazemos foruns de discussão, wikis, procuras em documentos
  5. http://svn.apache.org/repos/asf/lucene/java/trunk/CHANGES.txt
  6. http://svn.apache.org/repos/asf/lucene/java/trunk/CHANGES.txt
  7. Lucene.net - http://incubator.apache.org/lucene.net/Solr - http://lucene.apache.org/solr/Lucene - http://lucene.apache.org/Xapian - http://xapian.org/Mais implementaçoes em http://wiki.apache.org/lucene-java/LuceneImplementationsSolr é uma search engine “appliance”construida em cima de lucene que fornece serviços de indexação e searching por API HTTPNutch é um crawler/indexer/searcher webPosso acabar por ter de explicar as diferenças entre os doisPyLucene compila java para C e “wrappa” o código C para ser consumido por python
  8. Queremos encontrar a resposta ao nosso pedido.Não sabemos se a resposta tem as palavras exactamente iguais ao pedido, podemos estar a procurar em imensos sitios, e quueremos ter uma ideia de quao relevante é uma reposta em relação ao que perguntamos
  9. Procura directa nas entidades (iterarfunciona para numeros pequenos de entidades, e aplicações de desktop simplesLike é solução “directa”. Tem problemas de performance, não encontra palavras semelhantes, nem indica qual a semelhança entre o documento e a procuraFull Text Search funciona se tivermos SQL Server (admito que nunca experimentei)Lucene/Xapian é outra hipotese
  10. Uma “arquitectura” de search com lucenetipicamente divide-se emduaspartes:IndexingSearching Entidadessão as nossas “entidades de negocio”. Podem ser posts,livros, documentos.IndexWriters and searchers sãõ thread e process-safe, num esquema de readers/writer.Indice é trancadoparaescrita. É preciso re-abrir um searcher paraobternovos items queentretantoforamescritos
  11. Uma “arquitectura” de search com lucenetipicamente divide-se emduaspartes:IndexingSearching Entidadessão as nossas “entidades de negocio”. Podem ser posts,livros, documentos.IndexWriters and searchers sãõ thread e process-safe, num esquema de readers/writer.Indice é trancadoparaescrita. É preciso re-abrir um searcher paraobternovos items queentretantoforamescritos
  12. Uma “arquitectura” de search com lucenetipicamente divide-se emduaspartes:IndexingSearching Entidadessão as nossas “entidades de negocio”. Podem ser posts,livros, documentos.IndexWriters and searchers sãõ thread e process-safe, num esquema de readers/writer.Indice é trancadoparaescrita. É preciso re-abrir um searcher paraobternovos items queentretantoforamescritos
  13. Cria-se o indexwriter, queescrevepara um indicedocumentosquetêmcampos. Um campo tem nome, valor e opções. Depoisopçõesvemosna demo com maisdetalheAtenção, documentossaoimutaveis. Ouseja, paraalterar um documento é preciso remove-lo e voltar a adiciona-lo aoindiceUmaquestãointeressante tem a ver com o facto de que indices podem ser combinados …
  14. Peloque se podeter indexers a correrememparalelo (emmáquinasdiferentes) e os indices seremposteriormentecombinados num sóqueseráusadoparaprocuras
  15. Um query quevem doutilizador tem que ser analisado (divididoem tokens e stemmed, o mesmoquefoifeitoparaosdocumentos no indice)Oquesai de procurar no indicesao “search results”, queapenasapontamparadocumentos.Depoisparaobter o documentoemsi é precisopediraoindice (através do searcher) o documentoemsiDe repararque um documentonão é a “entidade” quequisemosguardar, massim a representaçãõque o lucene tem dela
  16. Tanto no searcher como noindexeremhaviaumacaixachamada “analyzer”. Um analizadorinterpreta o texto e “extrai” tokensquesãoguardados no indice.Implementamtécnicas e algoritmos de linguisticaparamelhorar a qualidade dos resultados.Inclui-se informação de posição no textonos tokensStopwordssão “ruido” linguisticoquetipicametenãõinteressaguardar, como a, aos, dos, para, quando…Stemming é dependente de linguagem e consisteemreduzir as palavras a umapalavraraiz (de forma a encontrarcompilarquandoseprocuraporcompilação, e maisimportante, encontrarcodigosquando se procuraporcodigo [ser invariante com numero])Nestecasoparaexemplificarusei o BrazilianAnalyzer (com o luke, quefalo a seguir e mostrona demo)
  17. Para explorar
  18. Lucene.net - http://incubator.apache.org/lucene.net/Solr - http://lucene.apache.org/solr/Lucene - http://lucene.apache.org/Xapian - http://xapian.org/
  19. Lucene.net - http://incubator.apache.org/lucene.net/Solr - http://lucene.apache.org/solr/Lucene - http://lucene.apache.org/Xapian - http://xapian.org/Mais implementaçoes em http://wiki.apache.org/lucene-java/LuceneImplementationsSolr é uma search engine “appliance”construida em cima de lucene que fornece serviços de indexação e searching por API HTTPNutch é um crawler/indexer/searcher webPosso acabar por ter de explicar as diferenças entre os doisPyLucene compila java para C e “wrappa” o código C para ser consumido por python