Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Solr für Volltext-Suche oder gleich als Datenbank Engine

52034cfb48ca73e13e130f2711ec41f0?s=47 Frank Neff
October 30, 2014

Solr für Volltext-Suche oder gleich als Datenbank Engine

Slides zum Talk an der Symfony Live Konferenz in Berlin 2014

52034cfb48ca73e13e130f2711ec41f0?s=128

Frank Neff

October 30, 2014
Tweet

Transcript

  1. Solr für Volltext-Suche oder gleich als Datenbank Engine Frank Neff

    Symfony Live Berlin 2014 #sfLiveSolr
  2. Über mich Frank Neff ▪ Software Engineer @ YMC AG

    ▪ Lebt in Zurich, Schweiz ▪ Codet PHP und Java ▪ Student ▪ Open Source Enthusiast ▪ Multicopter Drohne Pilot ▪ Hobby-Fotograf ▪ frankneff.ch ▪ ymc.ch
  3. None
  4. Open Source Switzerland Agile Since 2001 Conferences International Software solutions

    Best of swiss web Über YMC
  5. Mehr Daten...

  6. ...langsame Suche

  7. “If all you have is a hammer, everything looks like

    a nail” - Abraham Maslow
  8. None
  9. • Such-Server (Reverse Index) • Basiert auf Apache Lucene •

    Standalone oder Cluster • Skalierbar • Unterstützt diverse Formate • Stemmer, Stopwords, Facettierung • Gewichtung von Feldern
  10. “Solr wird mit mehr Daten nicht markant langsamer...”

  11. Funktionsweise Solr Index

  12. Textfeld: “This example shows how SOLR's tokenizing/indexing works…” Such-String: “How-To

    Solr tokenization” Beispiel Indexierung
  13. None
  14. Stop Filter Lower Case Filter English Possessive Filter Porter Stem

    Filter
  15. Gespeicherter Index Token Index biz 2 example 1 hard 2,3

    how 1,3 index 1,3 show 1,2 solr 1,3 work 1,2,3 Index Document 1 This example shows how SOLR's tokenizing/indexing works... 2 Show-biz is hard work! 3 How hard is the work with a solr index? *stark vereinfacht
  16. Query Matching

  17. ▪ ~500’000 Wörter (Duden) ▪ = max. Index-Tokens ▪ Wachstum

    des Indexes verringert sich / bleibt konstant ▪ Suche wird nicht langsamer Anzahl Artikel Index Grösse Index Grösse
  18. in PHP Integration

  19. ▪ Grundlegende C-Extension für Indexierung und Abfrage ▪ http://pecl.php.net/package/solr ▪

    http://php.net/manual/de/book.solr.php pecl/php_solr
  20. ▪ Feature-Complete Solr Library ◦ Geschrieben in PHP ◦ Facet

    support ◦ Query building API ◦ Plugin system ◦ DisMax support ▪ http://www.solarium-project.org/ Solarium
  21. Solarium Beispiel

  22. Symfony 2 Konzepte in

  23. ▪ Volltextsuche ▪ MySQL entlasten ▪ Document Store ▪ Polyglot-Persistence?

    Einsatzmöglichkeiten in Symfony 2
  24. Volltextsuche

  25. Volltextsuche MySQL Solr App index persist /search query /create ...

    /article/42 result query result
  26. ▪ Solr NRT-Search verwenden ▪ Indexierung “onPostPersist” ▪ Komplexe Queries

    ▪ Keine Datenbank-Last Volltextsuche
  27. Fixture

  28. Controller

  29. Repository

  30. MySQL entlasten

  31. MySQL entlasten Copying to tmp table… ☠ ☠ ☠

  32. MySQL entlasten MySQL Solr App index persist related articles query

    /create ... /article/42 result article content query result
  33. ▪ Komplexe Queries ▪ Operationen die “Full-Table-Scans” auslösen ▪ Between

    Abfragen ▪ Geo-Koordinaten ▪ Sortierte Listen ▪ Keine Datenbank-Last MySQL entlasten
  34. Document Store

  35. Document Store Solr App persist ordered / grouped list /create

    ... /incident/list result /search fulltext search result
  36. ▪ nelmio/solarium-bundle ▪ Schnelle Abfragen ▪ Sortierte Listen ▪ Volltextsuche

    “out of the box” ▪ Geeignet für grosse Dokumentarchive ▪ Keine Relationen Document Store
  37. Keine Relationen?

  38. ▪ Solr ist kein RDBMS! ▪ Hält viele Daten, unterstützt

    aber keine Strukturen ▪ Optionen ◦ Denormalisierung ◦ Object-Hydration (bspw. über Doctrine ORM) ◦ Polyglot-Persistence Relationen
  39. Object-Hydration MySQL Solr App persist /create /article/42 article User Artikel

    user by article index [hydrator] query result article + user
  40. ▪ floriansemm/solr-bundle ▪ Hydration über Solr-Index oder RDBMS ▪ Entity

    Annotation Support ▪ Indexierung anhand von Doctrine-Events ▪ Unterstützt Doctrine ORM/ODM Object-Hydration
  41. Entity Annotation

  42. Entity Annotation

  43. Entity Annotation

  44. Repository

  45. Polyglot Persistence

  46. Polyglot Persistence Neo4j Solr App persist data persist structure data

    query /create ... /article/42 result structure query result
  47. ▪ Trennung von Daten und Struktur ▪ Synchronisierung auf Business-Logik

    Level ▪ Noch kein OSS-Bundle Polyglot Persistence
  48. Query Language The Lucene

  49. "A search string" Simple Query Query all Fields

  50. title:"The Right Way" AND text:go Fields Field Name

  51. title:"te?t" AND text:*test* Wildcard search Single Character Wildcard String

  52. text:roam~0.8 Fuzzy search Levenshtein Distance

  53. text:"solr apache"~10 Proximity search Word Distance

  54. mod_date:[20020101 TO 20030101] Numeric Range

  55. title:{Aida TO Carmen} String Range

  56. text:"solr^4 apache" Term boosting Boost Factor

  57. "Apache Solr" NOT "Webserver" Exclusion Exclude Result

  58. (nginx OR apache) AND webserver Grouping

  59. coole Features Noch mehr

  60. ▪ Cluster-Betrieb ▪ High Availability ▪ Fault Tolerance ▪ Konfigurationsmanagement

    mit Zookeeper ▪ Benötigt Solr 4 ▪ cwiki.apache.org/confluence/x/ioDxAQ Solr Cloud
  61. ▪ Eingrenzung von Resultaten anhand verschiedener Filter ▪ A.k.a Explorative

    Suche ▪ Benutzer kann Filter selbst wählen und verknüpfen ▪ wiki.apache.org/solr/SolrFacetingOverview Faceting
  62. ▪ nelmio/NelmioSolariumBundle ▪ floriansemm/SolrBundle ▪ swiss-php-friends/solr-query-builder ▪ frne/symfony-solr-playground Try it

    out!
  63. Web Solutions Big Data Analytics Mobile Fragen ? Input ?

  64. Web Solutions Big Data Analytics Mobile Danke ;) @frank_neff www.frankneff.ch

    www.ymc.ch github.com/frne speakerdeck. com/frne Bilder 1. http://bigdata.globant.com/?p=629 2. http://www.ecloudtimes.com/reduce-blog-loading-time/ 3. http://grabcad.com/ 4. http://www.colbenson.com/-/apache-solr-course-in-bilbao- tomorrow 5. http://www.solarium-project.org/ 6. http://office-lernen.com/ 7. https://forums.zarafa.com/ 8. https://plus.google.com/+RecordxpressCa/posts 9. https://www.simple-talk.com/sql 10. http://cloudconceptgroup.com/ 11. http://www.digitec.ch