Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Lucene Solr talk at Java User Group Karlsruhe

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 70 Publicité

Plus De Contenu Connexe

Les utilisateurs ont également aimé (14)

Publicité
Publicité

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 Go Ergebnis 1 In Ergebnis 1 taucht der Suchbegriff auf... Ergebnis 2 In Ergebnis 2 taucht der Suchbegriff auch auf ... Ergebnis 3 … hier steht der Suchbegriff aus Ergebnis 3...
  5. 5. Suche Go Ergebnis 1 SQL In Ergebnis 1 taucht der Suchbegriff auf... Ergebnis 2 In Ergebnis 2 taucht der Suchbegriff auch auf ... Ergebnis 3 … hier steht der Suchbegriff aus Ergebnis 3...
  6. 6. Speaker * name Talk title * 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 Go Ergebnis 1 In Ergebnis 1 taucht der Suchbegriff auf... Ergebnis 2 In 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 Go Ergebnis 1 In Ergebnis 1 taucht der Suchbegriff auf... Ergebnis 2 In Ergebnis 2 taucht der Suchbegriff auch auf ... Ergebnis 3 … hier steht der Suchbegriff aus Ergebnis 3...
  14. 14. Dokument 1 Die Stadt liegt in den Bergen. Dokument 2 Vom Berg kann man die Stadt sehen.
  15. 15. Dokument 1 Die 1 Die Stadt 1. Tokenization Stadt 1,2 liegt in den liegt 1 Bergen. in 1 den 1 Bergen 1 Vom 2 Dokument 2 Berg 2 Vom Berg kann 2 kann man die Stadt man 2 sehen. die 2 sehen 2
  16. 16. Dokument 1 die 1,2 Die Stadt 1. Tokenization stadt 1,2 liegt in den liegt 1 Bergen. in 1 2. Lowercasing den 1 bergen 1 Dokument 2 vom 2 Vom Berg berg 2 kann man kann 2 die Stadt sehen. man 2 sehen 2
  17. 17. Dokument 1 die 1,2 Die Stadt 1. Tokenization stadt 1,2 liegt in den Bergen. liegt 1 in 1 2. Lowercasing den 1 berg 1,2 Dokument 2 3. Stemming vom 2 Vom Berg kann man kann 2 die 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 1 Document 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. Analyzer Tokenizer TokenFilter TokenFilter TokenFilter TokenFilter
  24. 24. Analyzer Analyzer Tokenizer StandardTokenizer TokenFilter StandardFilter TokenFilter LowercaseFilter TokenFilter GermanNormalizationFilter TokenFilter GermanLightStemFilter
  25. 25. Document IndexWriter Directory Analyzer
  26. 26. DEMO
  27. 27. Document IndexWriter Directory QueryParser 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 Boost score(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 Replicate Slave 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

×