Your SlideShare is downloading. ×
Lucene Solr talk at Java User Group Karlsruhe
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lucene Solr talk at Java User Group Karlsruhe

604

Published on

German slides introducing Lucene and Solr.

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
604
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Suchen und Finden mit Lucene und Solr Florian Hopf 04.07.2012
  • 2. http://techcrunch.com/2010/08/04/schmidt-data/
  • 3. Suche Go
  • 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. 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. Speaker * name Talktitle *content *talkdate Category * name
  • 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. 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. ● Performance?● Ranking?● False Positives● Ähnlichkeitssuche (Meyer <=> Meier)● Flexibilität?● Wartbarkeit?
  • 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. 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. ● Skalierbarkeit?● Unterschiedliche Formate?● Ranking?● Kombination mit Datenbank?
  • 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. Dokument 1 Die Stadtliegt in den Bergen.Dokument 2Vom Bergkann mandie Stadt sehen.
  • 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. 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. 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. ● Java-Bibliothek● Invertierter Index● Analyzer● Query-Syntax● Relevanz-Algorithmus● KEIN Crawler● KEIN Document-Extractor
  • 19. Quelle: http://www.ibm.com/developerworks/java/library/os-apache-lucenesearch/
  • 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. 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. ● Index ● ANALYZED ● NOT_ANALYZED ● NO● Store ● YES/NO● Feldtyp ● String, Numeric, Boolean
  • 23. AnalyzerTokenizerTokenFilterTokenFilterTokenFilterTokenFilter
  • 24. Analyzer AnalyzerTokenizer StandardTokenizerTokenFilter StandardFilterTokenFilter LowercaseFilterTokenFilter GermanNormalizationFilterTokenFilter GermanLightStemFilter
  • 25. Document IndexWriter Directory Analyzer
  • 26. DEMO
  • 27. Document IndexWriter DirectoryQueryParser Analyzer Query IndexSearcher IndexReader
  • 28. ● TermQuery ● Apache ● title:Apache● Boolean Query ● Apache AND Karaf● PhraseQuery ● "Apache Karaf"
  • 29. ● WildcardQuery ● Integ* ● Te?t● RangeQuery ● date:[20120705 TO 20121231]● FuzzyQuery ● Schneyder~
  • 30. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430]
  • 31. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430] BooleanQuery AND TermQuery FuzzyQuery RangeQuery title:apach speaker:schneyder date:[...]
  • 32. title:Apache AND speaker:schneyder~ AND date:[20120401 TO 20120430] BooleanQuery AND TermQuery FuzzyQuery RangeQuery title:apach speaker:schneyder date:[...]
  • 33. ● FilterQueries ● Ausschlusskriterium, kann gecacht werden● Sortierung● Boosting ● Indexing-Time ● Query-Time
  • 34. score(q , d )=coord (q , d )∗queryNorm (q )∗∑ (tf (t , d )∗idf (t)2∗t.boost∗norm (t , d )) t ∈q
  • 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. DEMO
  • 37. ● Parser API● Zahlreiche Formate● Integriert OpenSource-Libs● Betrieb embedded oder über Server
  • 38. DEMO
  • 39. ● Enterprise Search Server● Basiert auf Lucene● HTTP API● Index-Schema● Integriert häufig verwendete Lucene-Module● Facettierung● Dismax Query Parser● Admin-Interface
  • 40. Webapp Webapp XML, JSON, JavaBin, Ruby, ...Client http Solr Lucene
  • 41. Solr Home conf data solr-schema.xml Lucene config.xml
  • 42. schema.xml Field Types Fields
  • 43. Search Index Index Start Indexing Update DB Solr URL Request DIH Cell Files Handler Search Handler Caches Replication Search Comp. Lucene Monitoring
  • 44. solrconfig.xml Lucene Config Caches Request Handler Search Components
  • 45. Webapp Webapp XML, JSON, JavaBin, Ruby, ...Client http Solr Lucene
  • 46. DEMO
  • 47. Index Master ReplicateSlave Slave Loadbalancer Search
  • 48. ● Geospatial Search● More like this● Spellchecker● Suggester● Result Grouping● Function Queries● Sharding
  • 49. ● Suchserver basierend auf Apache Lucene● RESTful API● Dokumentenorientiert (JSON)● Schemafrei● Distributed Search● Near Realtime Search● No Commits (Transaction Log)
  • 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. 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. ● http://lucene.apache.org● http://tika.apache.org● http://lucene.apache.org/solr/● http://elasticsearch.org● http://github.com/fhopf/lucene-solr-talk
  • 53. http://nlp.stanford.edu/IR-book/
  • 54. Vielen Dank!http://www.florian-hopf.de @fhopf

×