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

Building the perfect Holidaysearch for HolidayC...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Elastic Co 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

Avatar for Elastic Co

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