Building the perfect HolidaySearch for
HolidayCheck with Elasticsearch
Andreas Neumann : Techlead Search
Über HolidayCheck
short introduction
Holidaycheck In Einem Satz
▪Die HolidayCheck AG betreibt das größte deutschsprachige
Meinungsportal für Reise und Urlaub i...
Company
Warschau(
360(MITARBEITER(
Stand(September(2015(
Bo?ghofen( München( Posen(
9(17(57(277(
(Geschä(sführer,-Angestel...
Elasticsearch bei HC
Elasticsearch
Elasticsearch Bei Holidaycheck
▪Suche
▪Datenanalyse : ES, Kibana
▪Data store: Microservices
▪Zentralisiertes Logging mit E...
kurz
▪Schweizer Taschenmesser
▪gutes Werkzeug für viele Entwickler-Probleme
▪breite Kenntnis im Unternehmen
▪verschiedene ...
Setup, ES Cluster
Kurz erwähnt
Unser Setup - Search Cluster
▪ CPU: 4 cores
▪ RAM: 16 gigs
▪ 8 gigs of heap
▪ 5 nodes
▪ 3 indices
▪ 2 400 000 documents
▪ ...
Suche und datengetriebene
Entwicklung
Domäne
Domäne: Travel
Domäne
Destinations
▪Destinations: Reiseziele
▪Länder
▪Reiseregionen
▪Städte
12
Hotels
▪Hotels
13
POIs - Points of Interest
▪Lokale
▪Feste
▪Sehenswürdigkeiten
14
Software / Search - Service
Search-Api
Search-API
▪ Endpoints für Produkte
▪ Mobile
▪iOS App
▪Android App
▪Web-Site
▪ API um Suchanfragen an Elasticsearch zu sen...
Frontend: Embedded Search - Mobile Web App
Vorgeschichte: Stand Januar 2015
▪ Team/ Entwickler haben Unternehmen verlassen
▪ lückenhafte Tests
▪ veraltete Dokumentat...
Entscheidung: Neuimplementierung
▪ Aufgabe: Neuentwicklung und Austausch der Suchapplikation
▪ Anforderung:
▪Testbarkeit/N...
Search API: Juni 2015
▪ Testsuite mit UnitTests / Integration Tests
▪ qualitative (Feature Tests) und Quantitative Tests (...
Production Request times: (3 queries per request)
21
Features: Querschnitt
Feature-Entwicklung
Featureentwicklung : Regeln Search HC
▪ stets auf harten Daten
▪Query Logs
▪User Tracking
▪…
▪ ständige Analysen
▪qualitat...
1.) Paris - textuelle Gleichheit
▪ Query: Paris
▪ Erwartung:
▪Paris in Frankreich
▪Stadt der Liebe
▪ Aber:
▪Paris in USA, ...
Ein Typisches Problem : “Textuelle Gleichheit”
▪ Erklärung: textuelle Gleichheit =>
gleicher Score
▪ Lösungsansatz: rescor...
2.) “San “- Prefix-Suche mit Mehrwortlexemen
▪ Query: “San “
▪ Feature: Query Suggest Prefix Search
▪ Problem: Whitespace ...
3.) Optimum: Suchstringlänge / Token-Count
▪ Anforderung: Betriebssicherheit
ohne Sucherlebnis einzuschränken
(Website cop...
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...
4.) Hotelketten + Ort
▪ Query: ibis münchen
▪ Anforderung: “<Hotellkette>
<Ort>” führt zu einem Suchergebnis
nur mit Hotel...
Learnings
▪ Features in der Suche beeinflussen sich gegenseitig
▪ Gleiches Verhalten in Feature A kann nach Release von Fe...
“Accuracy Tests”
Sicherheitsnetz
Was bringen Accuracy Tests ?
▪ Zusätzliche Sicherheit:
▪Deploy nothing that will decrease Quality
▪ Änderungen auf verschi...
Was sind Accuracy Tests ?
▪ ähnlich zu Regressionstests
▪ nicht binär, prozentual
▪ quantitative Tests: Testen einer große...
Voraussetzungen, Grundlagen
▪ die wichtigsten Daten abdecken
▪ “wichtig” definiert durch harte Kriterien (User Interaction...
Beispiel: User Interaction: Ergebnis Auswählen
{term} => {id/type} : {count}
münchen => 5…5b/dest : 4500
Daten - Beispiel
72632 mallorca/destination 07f5f656-4acc-3230-b7dd-aec3c13af37c
5136 mallorca/destination bc3304c5-a7f0-3...
Definition Eines Accuracy Tests
▪ Für alle Suchen nach Destination
sollen bei den am häufigsten
gewählten Ergebnissen
minde...
Debug-Tooling
Einige Mögliche Testszenarien
▪ Auftrittshäufigkeit
▪ Umsatz (€€€)
▪ Frequenz / €€€
▪ Stabilität beim Tippen
▪ Beobachtete...
Visualisierung mehrere Testläufe
▪ Testergebnisse werden nach ES
geschrieben
▪ Visualisierung mit Kibana
▪ Trends und Verä...
Integration in den
Development Prozess
Accuracy Tests
Trigger / Anwendung
▪ lokale Entwicklung: Dev Done nur wenn alle Tests “grün” sind
▪Zielzustand im Accuracy Test definiere...
Learnings
▪ Daten aktualisieren
▪ Datenerstellung hat initiale Kosten
▪ Integration in den Development Prozess notwendig
▪...
Fazit
Takeaways
Fazit
▪ Elasticsearch ist das perfekte Tool um eine Suchanwendung zu bauen
▪ Elasticsearch ist auch das perfekte Tool um T...
get in contact
Mail : andreas.neumann@holidaycheck.com
Twitter handle: @andreas_neumann
Danke für die Aufmerksamkeit :) - Schon einen Urlaub gebucht ?
Building the perfect HolidaySearch for HolidayCheck with Elasticsearch
Nächste SlideShare
Wird geladen in …5
×

Building the perfect HolidaySearch for HolidayCheck with Elasticsearch

948 Aufrufe

Veröffentlicht am

Talk I gave on Elastic{ON} in Munich about the development of a search application at HolidayChek and which approches helped us to achieve a good search experience.

Veröffentlicht in: Ingenieurwesen
0 Kommentare
2 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
948
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
66
Aktionen
Geteilt
0
Downloads
4
Kommentare
0
Gefällt mir
2
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Building the perfect HolidaySearch for HolidayCheck with Elasticsearch

  1. 1. Building the perfect HolidaySearch for HolidayCheck with Elasticsearch Andreas Neumann : Techlead Search
  2. 2. Über HolidayCheck short introduction
  3. 3. Holidaycheck In Einem Satz ▪Die HolidayCheck AG betreibt das größte deutschsprachige Meinungsportal für Reise und Urlaub im Internet. 3
  4. 4. Company Warschau( 360(MITARBEITER( Stand(September(2015( Bo?ghofen( München( Posen( 9(17(57(277( (Geschä(sführer,-Angestellte,-Prak6kanten,-Werkstudenten,-Auszubildende,-Aushilfen)-
  5. 5. Elasticsearch bei HC Elasticsearch
  6. 6. Elasticsearch Bei Holidaycheck ▪Suche ▪Datenanalyse : ES, Kibana ▪Data store: Microservices ▪Zentralisiertes Logging mit ES, Kibana und Logstash (ELK) 6
  7. 7. 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
  8. 8. Setup, ES Cluster Kurz erwähnt
  9. 9. 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 9
  10. 10. Suche und datengetriebene Entwicklung Domäne
  11. 11. Domäne: Travel Domäne
  12. 12. Destinations ▪Destinations: Reiseziele ▪Länder ▪Reiseregionen ▪Städte 12
  13. 13. Hotels ▪Hotels 13
  14. 14. POIs - Points of Interest ▪Lokale ▪Feste ▪Sehenswürdigkeiten 14
  15. 15. Software / Search - Service Search-Api
  16. 16. Search-API ▪ Endpoints für Produkte ▪ Mobile ▪iOS App ▪Android App ▪Web-Site ▪ API um Suchanfragen an Elasticsearch zu senden ▪ Query Preprocessing 16
  17. 17. Frontend: Embedded Search - Mobile Web App
  18. 18. Vorgeschichte: Stand Januar 2015 ▪ Team/ Entwickler haben Unternehmen verlassen ▪ lückenhafte Tests ▪ veraltete Dokumentation ▪ alte Elasticsearch Version (0.90) ▪ hardcoded solutions (hurghada) ▪ Deployment-Alptraum ▪ Performance-Probleme (Ø 200 - 400 ms) ▪ gewagte Architektur 18
  19. 19. 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 19
  20. 20. 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 20
  21. 21. Production Request times: (3 queries per request) 21
  22. 22. Features: Querschnitt Feature-Entwicklung
  23. 23. Featureentwicklung : Regeln Search HC ▪ stets auf harten Daten ▪Query Logs ▪User Tracking ▪… ▪ ständige Analysen ▪qualitativ ▪quantitativ 23
  24. 24. 1.) Paris - textuelle Gleichheit ▪ Query: Paris ▪ Erwartung: ▪Paris in Frankreich ▪Stadt der Liebe ▪ Aber: ▪Paris in USA, Texas ▪??? 24
  25. 25. 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"
  26. 26. 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 27
  27. 27. 3.) Optimum: Suchstringlänge / Token-Count ▪ Anforderung: Betriebssicherheit ohne Sucherlebnis einzuschränken (Website copy) ▪ Lösung: ▪typische Termlängen / Tokenverteilungen aus Daten bestimmen 28
  28. 28. 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)." }
  29. 29. 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) 30
  30. 30. 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 den Funktionalitätsverlust eines Features automatisiert bemerken ? ▪ Wie kann man die Funktionalität eines Features “schützen” ? 31 Fragen
  31. 31. “Accuracy Tests” Sicherheitsnetz
  32. 32. 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
  33. 33. Was sind Accuracy Tests ? ▪ ähnlich zu Regressionstests ▪ nicht binär, prozentual ▪ quantitative Tests: Testen einer große Datenmenge vs. ein Beispiel ▪ funktionale / inhaltliche Tests ▪ selbst gesetzte SLAs für die Suchergebnisse 34
  34. 34. Voraussetzungen, Grundlagen ▪ die wichtigsten Daten abdecken ▪ “wichtig” definiert durch harte Kriterien (User Interactions) ▪ Quellen: Suche (innen), Google Analytics (außen) ▪ (ständiger Feedbackloop) 35
  35. 35. Beispiel: User Interaction: Ergebnis Auswählen {term} => {id/type} : {count} münchen => 5…5b/dest : 4500
  36. 36. Daten - Beispiel 72632 mallorca/destination 07f5f656-4acc-3230-b7dd-aec3c13af37c 5136 mallorca/destination bc3304c5-a7f0-3cc1-8f3b-7782081d6bf8 691 mallorca/destination 6024bf89-e3bb-374c-8e80-5f527ecc958f
  37. 37. 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
  38. 38. Debug-Tooling
  39. 39. Einige Mögliche Testszenarien ▪ Auftrittshäufigkeit ▪ Umsatz (€€€) ▪ Frequenz / €€€ ▪ Stabilität beim Tippen ▪ Beobachtete Usecases ▪ Gruppiert nach Typ (Hotel, Ort …) ▪ Kombinationen aus oben genanntem 40
  40. 40. Visualisierung mehrere Testläufe ▪ Testergebnisse werden nach ES geschrieben ▪ Visualisierung mit Kibana ▪ Trends und Veränderungen sichtbar machen ▪ für Stakeholder/ PO 41
  41. 41. Integration in den Development Prozess Accuracy Tests
  42. 42. 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
  43. 43. 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 Stakeholdern abzustimmen ▪ => Speedup (PO kommt manchmal mit Stories nicht nach :) 44
  44. 44. Fazit Takeaways
  45. 45. 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
  46. 46. get in contact Mail : andreas.neumann@holidaycheck.com Twitter handle: @andreas_neumann
  47. 47. Danke für die Aufmerksamkeit :) - Schon einen Urlaub gebucht ?

×