Lucene Solr talk at Java User Group Karlsruhe

1,017 views
850 views

Published on

German slides introducing Lucene and Solr.

Published in: Art & Photos
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

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

No notes for slide

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

×