Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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

1.118 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
  • Als Erste(r) kommentieren

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 ?

×