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

Building the perfect Holidaysearch for HolidayCheck with Elasticsearch / Die perfekte Feriensuche mit Elasticsearch

Elastic Co
November 10, 2015

Building the perfect Holidaysearch for HolidayCheck with Elasticsearch / Die perfekte Feriensuche mit Elasticsearch

Eine “War-Story” - Wie man eine vorhandene Suchapplikation ersetzt, und dabei:
* etwas über die Travel-Branche lernt
* bereits in der Umstellungphase neue Features liefert
* ein stabiles, nutzerzentriertes Sucherlebnis gewährleistet
* ein Toolset auf Basis von Elasticsearch erstellt und damit das Sucherlebnis und Kommunikation mit Stakeholdern verbessert

Andreas Neumann | Elastic{ON}Tour Munich | November 10, 2015

Elastic Co

November 10, 2015
Tweet

More Decks by Elastic Co

Other Decks in Technology

Transcript

  1. Holidaycheck In Einem Satz ▪ Die HolidayCheck AG betreibt das

    größte deutschsprachige Meinungsportal für Reise und Urlaub im Internet. 3
  2. Company Warschau( 360(MITARBEITER( Stand(September(2015( Bo?ghofen( München( Posen( 9( 17( 57(

    277( (Geschä(sführer,-Angestellte,-Prak6kanten,-Werkstudenten,-Auszubildende,-Aushilfen)-
  3. Elasticsearch Bei Holidaycheck ▪ Suche ▪ Datenanalyse : ES, Kibana

    ▪ Data store: Microservices ▪ Zentralisiertes Logging mit ES, Kibana und Logstash (ELK) 6
  4. kurz ▪ Schweizer Taschenmesser ▪ gutes Werkzeug für viele Entwickler-

    Probleme ▪ breite Kenntnis im Unternehmen ▪ verschiedene Versionen nebeneinander zu betreiben ist problematisch ▪ möglichst früh und kontinuierlich updaten 7 Learnings
  5. Unser Setup - Search Cluster ▪ CPU: 4 cores ▪

    RAM: 16 gigs ▪ 8 gigs of heap ▪ 5 nodes ▪ 3 indices ▪ 2 400 000 documents ▪ 66 GB of data ▪ ES-Version: 1.7 9
  6. Search-API ▪ Endpoints für Produkte ▪ Mobile ▪iOS App ▪Android

    App ▪Web-Site ▪ API um Suchanfragen an Elasticsearch zu senden ▪ Query Preprocessing 16
  7. Vorgeschichte: Stand Januar 2015 ▪ Team/ Entwickler haben Unternehmen verlassen

    ▪ lückenhafte Tests ▪ veraltete Dokumentation ▪ alte Elasticsearch Version (0.90) ▪ hardcoded solutions (hurgada) ▪ Deployment-Alptraum ▪ Performance-Probleme (Ø 200 - 400 ms) ▪ gewagte Architektur ▪ in Produktion 18
  8. Entscheidung: Neuimplementierung ▪ Aufgabe: Neuentwicklung und Austausch der Suchapplikation ▪

    Anforderung: ▪Testbarkeit/Nachvollziehbarkeit: Softwarequalität ▪Testbarkeit/Nachvollziehbarkeit: Suchqualität <= selbst gesetzt ▪generelle Lösungsansätze (z.B. Approximative Suche) ▪Geschwindigkeit ▪ offenes Problem: ▪Wie garantieren, mindestens die inhaltliche Qualität der vorherigen Applikation zu erreichen ? 19
  9. Search API: Juni 2015 ▪ Testsuite mit UnitTests / Integration

    Tests ▪ qualitative (Feature Tests) und Quantitative Tests (Accuracy Tests),Blackbox Tests / Regression Tests: ▪170 Feature-Tests ▪4000+ Accuracy-Tests ▪ Deployment: ▪~ 5 min ▪~ 1 -3 Releases pro Woche ▪ Request: ▪Ø 60 ms 20
  10. Featureentwicklung : Regeln Search HC ▪ stets auf harten Daten

    ▪Query Logs ▪User Tracking ▪… ▪ ständige Analysen ▪qualitativ ▪quantitativ ▪ stabiles Sucherlebnis 23
  11. 1.) Paris - Textstelle Gleichheit ▪ Query: Paris ▪ Erwartung:

    ▪Paris in Frankreich ▪Stadt der Liebe ▪ Aber: ▪Paris in USA, Texas ▪??? 24
  12. Ein Typisches Problem : “Textuelle Gleichheit” ▪ Erklärung: textuelle Gleichheit

    => gleicher Score ▪ Lösungsansatz: rescoring ▪Idee: Destinationen mit vielen Hotels sind potentiell gute Reiseziele ▪Besonderheit: Rankingveränderungen im vorgegebenen Window 25 naiv: max_score: 9.351926 hits: _id: “3dd…” _score: 9.351926 fields: name: “Paris” hotels: 10 place:”Texas”, "USA" _id: “1f0…” _score: 9.351926 fields: name: ”Paris" hotels:2344 place:"Großraum Paris”, "Frankreich"
  13. 2.) “San “- Prefix-Suche mit Mehrwortlexemen ▪ Query: “San “

    ▪ Feature: Query Suggest Prefix Search ▪ Problem: Whitespace als erlaubtes Zeichen für Mehrwortlexeme ▪ Lösungsansatz: Phrasensuche + Term Suche ▪ Besonderheit: Spannung zwischen Term- und Phrasensuche 27
  14. 3.) Optimum: Suchstringlänge / Token-Count ▪ Anforderung: Betriebssicherheit ohne Sucherlebnis

    einzuschränken (Website copy) ▪ Lösung: ▪typische Termlängen / Tokenverteilungen aus Daten bestimmen ▪limits setzen 28
  15. zu lange Suchanfrage wird zurückgewiesen http "http://m.holidaycheck.de/svc/search-api/buckets/x x x x

    x x x x x x x x x x x x x x x x" HTTP/1.1 400 Bad Request Connection: keep-alive Content-Length: 62 Content-Type: application/json; charset=UTF-8 Date: Thu, 22 Oct 2015 12:26:58 GMT X-Trace-Token: fe71180598d3-15723 { "error": "ValidationRejection(search term is too long,None)." }
  16. 4.) Hotelketten + Ort ▪ Query: ibis münchen ▪ Anforderung:

    “<Hotellkette> <Ort>” führt zu einem Suchergebnis nur mit Hotels einer bestimmten Kette ▪ Lösung: Query Preprocessing (Keyword Spotting) ▪ Besonderheit: komplette Änderung des Suchverhaltens bei Keyword/ Seiteneffekte 30
  17. Learnings ▪ Features in der Suche beeinflussen sich gegenseitig ▪

    Gleiches Verhalten in Feature A kann nach Release von Feature B nicht automatisch angenommen werden ▪ Wie kann man die Funktionalitätsverlust eines Features automatisiert bemerken ? ▪ Wie kann man die Funktionalität eines Features “schützen” ? 31 Fragen
  18. Was bringen Accuracy Tests ? ▪ Zusätzliche Sicherheit: ▪Deploy nothing

    that will decrease Quality ▪ Änderungen auf verschiedenen Ebenen fallen frühzeitig auf ▪ Querbeziehung/ Einflüsse von Features auf andere Features frühzeitig erkennen 33
  19. Was sind Accuracy Tests ? ▪ ähnlich zu Regressionstests ▪

    nicht binär, prozentual ▪ quantitative Tests: Testen eine große Datenmenge vs. ein Beispiel ▪ funktionale / inhaltliche Tests ▪ selbst gesetzte SLAs für die Suchergebnisse 34
  20. Voraussetzungen, Grundlagen ▪ die wichtigsten Daten abdecken ▪ “wichtig” definiert

    durch harte Kriterien (User Interactions) ▪ Quellen: Suche (innen), Google Analytics (außen) ▪ (ständiger Feedbackloop) 35
  21. Definition Eines Accuracy Tests ▪ Für alle Suchen nach Destination

    sollen bei den am häufigsten gewählten Ergebnissen mindestens 90% einen Hit im View-Window 1-3 erscheinen ▪ X = Queries mit höchster Frequenz ▪ Y = Destination wurden gesucht ▪ Z = View Window 3 ▪ Goal 90% 38
  22. Einige Mögliche Testszenarien ▪ Auftrittshäufigkeit ▪ Umsatz (€€€) ▪ Frequenz

    / €€€ ▪ Stabilität beim Tippen ▪ Beobachtete Usecases ▪ Gruppiert nach Typ (Hotel, Ort …) ▪ Kombinationen aus oben genanntem 40
  23. Visualisierung mehrere Testläufe ▪ Testergebnisse werden nach ES geschrieben ▪

    Visualisierung mit Kibana ▪ Trends und Veränderungen sichtbar machen ▪ für Stakeholder/ PO 41
  24. Trigger / Anwendung ▪ lokale Entwicklung: Dev Done nur wenn

    alle Tests “grün” sind ▪Zielzustand im Accuracy Test definieren ▪run and code until green ▪ Update der ES-Indices: Deckt Änderungen in den Daten / Umbenennungen auf (CI) ▪ Teil des Release-Prozesses: Release => test container on CI with Production Data => deployment nur wenn Accuracy Tests erfüllt (CI) 43
  25. Learnings ▪ Daten aktualisieren ▪ Datenerstellung hat initiale Kosten ▪

    Integration in den Development Prozess notwendig ▪ Tests haben meistens Recht : unerwartete Fehler werden aufgedeckt ▪ Tooling / Unterstützung der Entwickler notwendig um Akzeptanz zu erreichen ▪ Visualisierung hilfreich ▪ Gutes Medium um Requirements mit Stakeholder abzustimmen ▪ => Speedup (PO kommt manchmal mit Stories nicht nach :) 44
  26. Fazit ▪ Elasticsearch ist das perfekte Tool um eine Suchanwendung

    zu bauen ▪ Elasticsearch ist auch das perfekte Tool um Tools zu bauen, die bei der Entwicklung und Optimierung einer Suchanwendung helfen. ▪ πάντα ῥεῖ ▪ Accuracy Tests and Feature Test: ▪wer nicht checkt, sucht dumm 46