http://netponto.org<br />5ª Reunião Presencial - 12/12/2009<br />Introdução ao Lucene.NetBruno Lopes<br />
Bruno Lopes<br />
o quê<br />porquê<br />como<br />
o quê<br />
Text Search Engine<br />Mauris dapibus, mauris in pharetra auctor, sapien est feugiat metus, ac suscipit mi erat nec leo. ...
Base<br />Ports<br />Nutch<br />Lucene.net<br />Solr<br />PyLucene<br />Alternativas<br />SQL Server FTS<br />Xapian<br />...
Porquê?<br />
Problema<br />“história de portugal”<br />
Como?<br />
Entidades<br />Document<br />IndexWriter<br />Index<br />Indexing<br />
User Query<br />QueryParser<br />Query<br />Index<br />IndexSearcher<br />Search Results<br />Searching<br />
3<br />1<br />Field<br />IndexWriter<br />2<br />Name<br />Analyzer<br />Value<br />7<br />Document<br />4<br />Options<br...
1<br />IndexWriter<br />Index<br />2<br />IndexWriter<br />Index<br />Index<br />IndexWriter<br />3<br />IndexWriter<br />...
2<br />1<br />QueryParser<br />4<br />User Query<br />Query<br />Analyzer<br />Query<br />Query<br />Security Trimming<br ...
Analyzers<br />Isto é umafraseparamostrarcomofuncionamAnalisadores.<br />tokenize<br />Isto<br />é<br />mostrar<br />frase...
Indexação e Procura<br />demonstração<br />
?<br />?<br />?<br />?<br />?<br />?<br />?<br />
Referências<br />Lucene<br />http://lucene.apache.org<br />Lucene.net<br />http://incubator.apache.org/lucene.net<br />Luk...
Patrocinadores desta reunião<br />
Obrigado!<br />Bruno Lopes<br />brunomlopes@gmail.com<br />http://brunomlopes.com<br />http://twitter.com/brunomlopes<br />
Upcoming SlideShare
Loading in …5
×

Introdução ao Lucene.net

2,746 views

Published on

Apresentação sobre o Lucene.net, um framework open-source desenvolvido em .NET que permite desenvolver motores de indexação e busca, com demonstrações práticas de criação de índices e busca na 5ª reunião presencial da comunidade NetPonto

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,746
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
27
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Apresentação tem 3 fases, mais uma fase final de demo
  • MotivaçãoEuquerocontribuirpara um mundolivredestasabominaçõesIsto é o queaconteceqnd se tentafazer textual search sobre bases de dados
  • Web Text Search engines
  • Verdade, nós não trabalhamos (todos) no google, no bing, no yahooMas fazemos CMS...Fazemos foruns de discussão, wikis, procuras em documentos
  • http://svn.apache.org/repos/asf/lucene/java/trunk/CHANGES.txt
  • http://svn.apache.org/repos/asf/lucene/java/trunk/CHANGES.txt
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 …
  • Peloque se podeter indexers a correrememparalelo (emmáquinasdiferentes) e os indices seremposteriormentecombinados num sóqueseráusadoparaprocuras
  • 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
  • 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)
  • Para explorar
  • Lucene.net - http://incubator.apache.org/lucene.net/Solr - http://lucene.apache.org/solr/Lucene - http://lucene.apache.org/Xapian - http://xapian.org/
  • 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
  • Introdução ao Lucene.net

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

    ×