Suchen und Finden mit   Lucene und Solr      Florian Hopf      04.07.2012
http://techcrunch.com/2010/08/04/schmidt-data/
Suche   Go
Suche                                GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht...
Suche                                GoErgebnis 1                                            SQLIn Ergebnis 1 taucht der S...
Speaker               *                   name  Talktitle      *content    *talkdate                   Category           ...
mysql> select * from talk where title like "%apache%";+----+-------------------------------------------+---------+--------...
mysql> select * from talk t join talk_category tc join category c where t.id =tc.talk and tc.category = c.id and (c.name l...
●   Performance?●   Ranking?●   False Positives●   Ähnlichkeitssuche (Meyer <=> Meier)●   Flexibilität?●   Wartbarkeit?
Suche                                GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht...
File directory = new File(dir);File[] textFiles = directory.listFiles(new TextFiles());for (File probableMatch : textFiles...
●   Skalierbarkeit?●   Unterschiedliche Formate?●   Ranking?●   Kombination mit Datenbank?
SQL            Suche                                GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Er...
Dokument 1  Die Stadtliegt in den  Bergen.Dokument 2Vom Bergkann mandie Stadt   sehen.
Dokument 1                                 Die      1  Die Stadt    1. Tokenization   Stadt    1,2liegt in den            ...
Dokument 1                       die      1,2  Die Stadt    1. Tokenization   stadt    1,2liegt in den                    ...
Dokument 1                       die     1,2  Die Stadt    1. Tokenization   stadt   1,2liegt in den  Bergen.             ...
●   Java-Bibliothek●   Invertierter Index●   Analyzer●   Query-Syntax●   Relevanz-Algorithmus●   KEIN Crawler●   KEIN Docu...
Quelle: http://www.ibm.com/developerworks/java/library/os-apache-lucenesearch/
●   Indexieren:    ●   Erstellen eines Documents    ●   Festlegen des Analyzers    ●   Indexieren über IndexWriter●   Such...
Document  Field title      title     Integration1                    Name ganz einfach mit Apache Camel                   ...
●   Index    ●   ANALYZED    ●   NOT_ANALYZED    ●   NO●   Store    ●   YES/NO●   Feldtyp    ●   String, Numeric, Boolean
AnalyzerTokenizerTokenFilterTokenFilterTokenFilterTokenFilter
Analyzer             AnalyzerTokenizer        StandardTokenizerTokenFilter        StandardFilterTokenFilter        Lowerca...
Document   IndexWriter                         Directory            Analyzer
DEMO
Document           IndexWriter                                                DirectoryQueryParser          Analyzer  Quer...
●   TermQuery    ●   Apache    ●   title:Apache●   Boolean Query    ●   Apache AND Karaf●   PhraseQuery    ●   "Apache Kar...
●   WildcardQuery    ●   Integ*    ●   Te?t●   RangeQuery    ●   date:[20120705 TO 20121231]●   FuzzyQuery    ●   Schneyder~
title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]
title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]                           BooleanQuery                ...
title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]                           BooleanQuery                ...
●   FilterQueries    ●   Ausschlusskriterium, kann gecacht werden●   Sortierung●   Boosting    ●   Indexing-Time    ●   Qu...
score(q , d )=coord (q , d )∗queryNorm (q )∗∑ (tf (t , d )∗idf (t)2∗t.boost∗norm (t , d ))                                ...
Anzahl der                  Invers zu Anzahl                         Feldlänge,       Matches im                   Dokumen...
DEMO
●   Parser API●   Zahlreiche Formate●   Integriert OpenSource-Libs●   Betrieb embedded oder über Server
DEMO
●   Enterprise Search Server●   Basiert auf Lucene●   HTTP API●   Index-Schema●   Integriert häufig verwendete Lucene-Modu...
Webapp                                          Webapp         XML, JSON, JavaBin, Ruby, ...Client              http      ...
Solr Home             conf                data               solr-schema.xml                      Lucene             confi...
schema.xml      Field Types         Fields
Search        Index      Index      Start                                    Indexing             Update                  ...
solrconfig.xml      Lucene Config         Caches     Request Handler   Search Components
Webapp                                          Webapp         XML, JSON, JavaBin, Ruby, ...Client              http      ...
DEMO
Index          Master          ReplicateSlave                       Slave        Loadbalancer           Search
●   Geospatial Search●   More like this●   Spellchecker●   Suggester●   Result Grouping●   Function Queries●   Sharding
●   Suchserver basierend auf Apache Lucene●   RESTful API●   Dokumentenorientiert (JSON)●   Schemafrei●   Distributed Sear...
curl -XPOST http://localhost:9200/jugka/talk/ -d {    "speaker" : "Florian Hopf",    "date" : "2012-07-04T19:30:00",    "t...
curl -XGET http://localhost:9200/jugka/talk/_search?q=solr{"took":29,"timed_out":false,"_shards":{"total":5,"successful":5...
●   http://lucene.apache.org●   http://tika.apache.org●   http://lucene.apache.org/solr/●   http://elasticsearch.org●   ht...
http://nlp.stanford.edu/IR-book/
Vielen Dank!http://www.florian-hopf.de         @fhopf
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Lucene Solr talk at Java User Group Karlsruhe
Nächste SlideShare
Wird geladen in …5
×

Lucene Solr talk at Java User Group Karlsruhe

1.115 Aufrufe

Veröffentlicht am

German slides introducing Lucene and Solr.

Veröffentlicht in: Kunst & Fotos
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.115
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
9
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Lucene Solr talk at Java User Group Karlsruhe

  1. 1. Suchen und Finden mit Lucene und Solr Florian Hopf 04.07.2012
  2. 2. http://techcrunch.com/2010/08/04/schmidt-data/
  3. 3. Suche Go
  4. 4. Suche GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...
  5. 5. Suche GoErgebnis 1 SQLIn Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...
  6. 6. Speaker * name Talktitle *content *talkdate Category * name
  7. 7. mysql> select * from talk where title like "%apache%";+----+-------------------------------------------+---------+------------+| id | title | content | talkdate |+----+-------------------------------------------+---------+------------+| 1 | Apache Karaf | ... | 2012-04-25 || 2 | Integration ganz einfach mit Apache Camel | ... | 2012-04-04 |+----+-------------------------------------------+---------+------------+2 rows in set (0.00 sec)
  8. 8. mysql> select * from talk t join talk_category tc join category c where t.id =tc.talk and tc.category = c.id and (c.name like %OSGi% or t.title like%OSGi% or t.content like %OSGi%);+----+-------------------------------------------+---------+------------+------+----------+----+------+| id | title | content | talkdate | talk | category | id | name |+----+-------------------------------------------+---------+------------+------+----------+----+------+| 1 | Apache Karaf | ... | 2012-04-25 | 1 | 1 | 1 | OSGi || 2 | Integration ... | ... | 2012-04-04 | 2 | 1 | 1 | OSGi |+----+-------------------------------------------+---------+------------+------+----------+----+------+2 rows in set (0.00 sec)
  9. 9. ● Performance?● Ranking?● False Positives● Ähnlichkeitssuche (Meyer <=> Meier)● Flexibilität?● Wartbarkeit?
  10. 10. Suche GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...
  11. 11. File directory = new File(dir);File[] textFiles = directory.listFiles(new TextFiles());for (File probableMatch : textFiles) { String text = readText(probableMatch); if (text.matches(".*" + Pattern.quote(term) + ".*")) { filesWithMatches.add(probableMatch.getAbsolutePath()); }}
  12. 12. ● Skalierbarkeit?● Unterschiedliche Formate?● Ranking?● Kombination mit Datenbank?
  13. 13. SQL Suche GoErgebnis 1In Ergebnis 1 taucht der Suchbegriff auf...Ergebnis 2In Ergebnis 2 taucht der Suchbegriff auch auf ...Ergebnis 3… hier steht der Suchbegriff aus Ergebnis 3...
  14. 14. Dokument 1 Die Stadtliegt in den Bergen.Dokument 2Vom Bergkann mandie Stadt sehen.
  15. 15. Dokument 1 Die 1 Die Stadt 1. Tokenization Stadt 1,2liegt in den liegt 1 Bergen. in 1 den 1 Bergen 1 Vom 2Dokument 2 Berg 2Vom Berg kann 2kann mandie Stadt man 2 sehen. die 2 sehen 2
  16. 16. Dokument 1 die 1,2 Die Stadt 1. Tokenization stadt 1,2liegt in den liegt 1 Bergen. in 1 2. Lowercasing den 1 bergen 1Dokument 2 vom 2Vom Berg berg 2kann man kann 2die Stadt sehen. man 2 sehen 2
  17. 17. Dokument 1 die 1,2 Die Stadt 1. Tokenization stadt 1,2liegt in den Bergen. liegt 1 in 1 2. Lowercasing den 1 berg 1,2Dokument 2 3. Stemming vom 2Vom Bergkann man kann 2die Stadt man 2 sehen. seh 2
  18. 18. ● Java-Bibliothek● Invertierter Index● Analyzer● Query-Syntax● Relevanz-Algorithmus● KEIN Crawler● KEIN Document-Extractor
  19. 19. Quelle: http://www.ibm.com/developerworks/java/library/os-apache-lucenesearch/
  20. 20. ● Indexieren: ● Erstellen eines Documents ● Festlegen des Analyzers ● Indexieren über IndexWriter● Suchen: ● Verwendung des selben Analyzers ● Parsen der Query mit QueryParser ● Auslesen über IndexSearcher/IndexReader ● Ausgabe über Document
  21. 21. Document Field title title Integration1 Name ganz einfach mit Apache Camel Value Value 1 Field date title Name 1 20120404 Value Value 1 Field title speaker title Integration1Christian Schneider Name ganz einfach mit Apache Camel Value Value 1Document Field title title Integration1 Apache KarafApache Camel Name ganz einfach mit Value 1 Value Field date title Name 1 20120425 Value Value 1 Field title speaker title Integration1Christian Schneider Name ganz einfach mit Apache Camel Value Value 1 Field title speaker title Integration1 Achim Nierbeck Name ganz einfach mit Apache Camel Value Value 1
  22. 22. ● Index ● ANALYZED ● NOT_ANALYZED ● NO● Store ● YES/NO● Feldtyp ● String, Numeric, Boolean
  23. 23. AnalyzerTokenizerTokenFilterTokenFilterTokenFilterTokenFilter
  24. 24. Analyzer AnalyzerTokenizer StandardTokenizerTokenFilter StandardFilterTokenFilter LowercaseFilterTokenFilter GermanNormalizationFilterTokenFilter GermanLightStemFilter
  25. 25. Document IndexWriter Directory Analyzer
  26. 26. DEMO
  27. 27. Document IndexWriter DirectoryQueryParser Analyzer Query IndexSearcher IndexReader
  28. 28. ● TermQuery ● Apache ● title:Apache● Boolean Query ● Apache AND Karaf● PhraseQuery ● "Apache Karaf"
  29. 29. ● WildcardQuery ● Integ* ● Te?t● RangeQuery ● date:[20120705 TO 20121231]● FuzzyQuery ● Schneyder~
  30. 30. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]
  31. 31. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430] BooleanQuery AND TermQuery FuzzyQuery RangeQuery title:apach speaker:schneyder date:[...]
  32. 32. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430] BooleanQuery AND TermQuery FuzzyQuery RangeQuery title:apach speaker:schneyder date:[...]
  33. 33. ● FilterQueries ● Ausschlusskriterium, kann gecacht werden● Sortierung● Boosting ● Indexing-Time ● Query-Time
  34. 34. score(q , d )=coord (q , d )∗queryNorm (q )∗∑ (tf (t , d )∗idf (t)2∗t.boost∗norm (t , d )) t ∈q
  35. 35. Anzahl der Invers zu Anzahl Feldlänge, Matches im Dokumente, die Index- Dokument den Term enthalten Boostscore(q , d )=coord (q , d )∗queryNorm (q )∗∑ (tf (t , d )∗idf (t)2∗t.boost∗norm (t , d )) t ∈q Anzahl Term Query- im Dokument Boost
  36. 36. DEMO
  37. 37. ● Parser API● Zahlreiche Formate● Integriert OpenSource-Libs● Betrieb embedded oder über Server
  38. 38. DEMO
  39. 39. ● Enterprise Search Server● Basiert auf Lucene● HTTP API● Index-Schema● Integriert häufig verwendete Lucene-Module● Facettierung● Dismax Query Parser● Admin-Interface
  40. 40. Webapp Webapp XML, JSON, JavaBin, Ruby, ...Client http Solr Lucene
  41. 41. Solr Home conf data solr-schema.xml Lucene config.xml
  42. 42. schema.xml Field Types Fields
  43. 43. Search Index Index Start Indexing Update DB Solr URL Request DIH Cell Files Handler Search Handler Caches Replication Search Comp. Lucene Monitoring
  44. 44. solrconfig.xml Lucene Config Caches Request Handler Search Components
  45. 45. Webapp Webapp XML, JSON, JavaBin, Ruby, ...Client http Solr Lucene
  46. 46. DEMO
  47. 47. Index Master ReplicateSlave Slave Loadbalancer Search
  48. 48. ● Geospatial Search● More like this● Spellchecker● Suggester● Result Grouping● Function Queries● Sharding
  49. 49. ● Suchserver basierend auf Apache Lucene● RESTful API● Dokumentenorientiert (JSON)● Schemafrei● Distributed Search● Near Realtime Search● No Commits (Transaction Log)
  50. 50. curl -XPOST http://localhost:9200/jugka/talk/ -d { "speaker" : "Florian Hopf", "date" : "2012-07-04T19:30:00", "title" : "Suchen und Finden mit Lucene und Solr"}{"ok":true,"_index":"jugka","_type":"talk","_id":"CeltdivQRGSvLY_dBZv1jw","_version":1}
  51. 51. curl -XGET http://localhost:9200/jugka/talk/_search?q=solr{"took":29,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.054244425,"hits":[{"_index":"jugka","_type":"talk","_id":"CeltdivQRGSvLY_dBZv1jw","_score":0.054244425, "_source" : { "speaker" : "Florian Hopf", "date" : "2012-07-04T19:30:00", "title" : "Suchen und Finden mit Lucene und Solr"}
  52. 52. ● http://lucene.apache.org● http://tika.apache.org● http://lucene.apache.org/solr/● http://elasticsearch.org● http://github.com/fhopf/lucene-solr-talk
  53. 53. http://nlp.stanford.edu/IR-book/
  54. 54. Vielen Dank!http://www.florian-hopf.de @fhopf

×