Elasticsearch Autocomplete Guide

Opster Team

Letzte Aktualisierung: Mar 2021

Opster Team

März 2021

Zusätzlich zum Lesen dieses Handbuchs empfehlen wir Ihnen, den Elasticsearch-Integritätscheck auszuführen. Es erkennt Probleme und verbessert Ihre Elasticsearch-Leistung, indem es Ihre Shard-Größen, Threadpools, Speicher, Snapshots, Festplatten-Wasserzeichen und mehr analysiert.Der Elasticsearch Check-Up ist kostenlos und erfordert keine Installation.

Zusätzlich zum Lesen dieses Handbuchs sollten Sie den Search Log Analyzer von Opster ausführen, wenn Sie Ihre Suchleistung in Elasticsearch verbessern möchten.

Mit dem Analyzer von Opster können Sie langsame Suchvorgänge leicht lokalisieren und verstehen, was dazu geführt hat, dass sie Ihr System zusätzlich belastet haben. Sie erhalten maßgeschneiderte Empfehlungen, wie Sie die Suchlatenz reduzieren und Ihre Suchleistung verbessern können. Das Tool ist kostenlos und dauert nur 2 Minuten.

Hintergrund

In diesem Artikel erfahren Sie, wie Sie kritische Leistungsfehler vermeiden, warum die Elasticsearch-Standardlösung dies nicht tut, und wichtige Überlegungen zur Implementierung.
Alle modernen Websites verfügen über Funktionen zur automatischen Vervollständigung (Suche während der Eingabe) in der Suchleiste, um die Benutzerfreundlichkeit zu verbessern (niemand möchte ganze Suchbegriffe eingeben …). Es ist zwingend erforderlich, dass die automatische Vervollständigung schneller als die Standardsuche ist, da der springende Punkt der automatischen Vervollständigung darin besteht, die Ergebnisse anzuzeigen, während der Benutzer tippt. Wenn die Latenz hoch ist, führt dies zu einer unterdurchschnittlichen Benutzererfahrung.

Unten finden Sie ein Beispiel für die automatische Vervollständigung der Suche auf der berühmten Frage-und-antwort-Site Quora. Dies ist ein gutes Beispiel für die automatische Vervollständigung: Bei der Suche nach elasticsearch auto werden die folgenden Beiträge in der Suchleiste angezeigt.

Dieses Bild hat ein leeres Alt-Attribut; sein Dateiname ist GtQyiRxpwyXg_NmYFLO5mSlG5Zwa-k6a-s2AIi-uP3EsEP8dRql8eR0CrfGZlN_PIcUMU9K-GDZ2WfEASrxgxGSXiE37pzwNNffIcjq-xlBA982DZe8TQJFzYaLl8WojdrdlVNjQ

Beachten Sie, dass in den Suchergebnissen Fragen zu den Funktionen Auto-Scaling, Auto-Tag und Autocomplete von Elasticsearch enthalten sind. Benutzer können einige weitere Zeichen eingeben, um die Suchergebnisse zu verfeinern.

Verschiedene Ansätze für die automatische Vervollständigung in Elasticsearch / Suchen während der Eingabe

Es gibt mehrere Möglichkeiten, die Funktion zur automatischen Vervollständigung zu implementieren, die im Großen und Ganzen in vier Hauptkategorien unterteilt sind:

  1. Indexzeit
  2. Abfragezeit
  3. Vervollständigungsvorschlag
  4. Datenbank nach Typ durchsuchen

1. Indexzeit

Manchmal sind die Anforderungen nur Präfix-Vervollständigung oder Infix-Vervollständigung in der automatischen Vervollständigung. Es ist nicht ungewöhnlich, dass die Implementierung der automatischen Vervollständigung mithilfe der benutzerdefinierten Analysatoren erfolgt, bei der die Token so indiziert werden, dass sie mit dem Suchbegriff des Benutzers übereinstimmen.
Wenn wir mit unserem Beispiel fortfahren, betrachten wir Dokumente, die aus “elasticsearch autocomplete”, “elasticsearch auto-tag”, “elasticsearch auto scaling” und “elasticsearch automatically” bestehen. Der Standardanalysator generiert keine Teil-Token für “autocomplete”, “autoscaling” und “automatically”, und die Suche nach “auto” würde keine Ergebnisse liefern.
Um das obige Problem zu beheben, werden Edge-Ngram- oder n-Gram-Tokenizer zum Indizieren von Token in Elasticsearch verwendet, wie im offiziellen ES-Dokument und im Search Time Analyzer erläutert, um die Ergebnisse der automatischen Vervollständigung zu erhalten.
Der obige Ansatz verwendet Match-Abfragen, die schnell sind, da sie einen String-Vergleich verwenden (der Hashcode verwendet), und es gibt vergleichsweise weniger genaue Token im Index.

2. Abfragezeit

Die automatische Vervollständigung kann erreicht werden, indem Übereinstimmungsabfragen in Präfixabfragen geändert werden. Während Übereinstimmungsabfragen für Token (indiziert) bis Token (Suchabfragetoken) übereinstimmen, stimmen Präfixabfragen (wie der Name schon sagt) mit allen Token überein, die mit Suchtoken beginnen.

Wie bereits erläutert, ist die Präfixabfrage keine exakte Token-Übereinstimmung, sondern basiert auf Zeichenübereinstimmungen in der Zeichenfolge, was sehr kostspielig ist und viele Dokumente abruft. Elasticsearch verwendet intern eine Datenstruktur vom Typ B + Tree, um seine Token zu speichern. Es ist nützlich, die Interna der Datenstruktur zu verstehen, die von invertierten Indizes verwendet wird, und wie sich verschiedene Arten von Abfragen auf die Leistung und die Ergebnisse auswirken.

3. Vervollständigung suggester

Dies ist nützlich, wenn Sie Vorschläge für Suchbegriffe wie auf E-Commerce- und Hotelsuchwebsites machen. Die Suchleiste bietet Abfragevorschläge im Gegensatz zu den Vorschlägen, die in den tatsächlichen Suchergebnissen angezeigt werden.

Wie im offiziellen ES-Dokument erwähnt, befindet es sich noch in der Entwicklung und ruft die Suchergebnisse nicht basierend auf Suchbegriffen ab, wie in unserem Beispiel erläutert.

Intern werden die Token indiziert, die Benutzer vorschlagen möchten, und nicht basierend auf vorhandenen Dokumenten.

Codebeispiele

1. Indexzeit

Indexdefinition:

{ "settings": { "analysis": { "filter": { "autocomplete_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 10 } }, "analyzer": { "autocomplete": { "type": "custom", "tokenizer": "standard", "filter": } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "autocomplete", "search_analyzer": "standard" :-> note search_analyzer } } }}

Suchanfrage:

{ "query": { "match": { "movie_name": { "query": "avengers inf" } } }}

2. Abfragezeit

Indexdefinition:

{ "mappings": { "properties": { "movie_name": { "type": "text" } } }}

Suchanfrage:

{ "query": { "bool": { "should": } }}

4. Suchen Sie während der Eingabe

Es handelt sich um einen kürzlich veröffentlichten Datentyp (veröffentlicht in 7.2), der die automatischen Vervollständigungsabfragen ohne vorherige Kenntnis der Einrichtung eines benutzerdefinierten Analysators erleichtern soll. Elasticsearch speichert intern die verschiedenen Token (Edge n-Gram, Shingles) desselben Textes und kann daher sowohl für die Präfix- als auch für die Infix-Vervollständigung verwendet werden. Es kann praktisch sein, wenn Sie nicht mit den erweiterten Funktionen von Elasticsearch vertraut sind, was bei den anderen drei Ansätzen der Fall ist. Es ist nicht viel Konfiguration erforderlich, damit es mit einfachen Anwendungsfällen funktioniert, und Codebeispiele und weitere Details finden Sie in offiziellen ES-Dokumenten.

Leistungsüberlegung

Fast alle oben genannten Ansätze funktionieren gut mit kleineren Datensätzen mit leichteren Suchlasten, aber wenn Sie einen massiven Index haben, der eine hohe Anzahl von Auto Suggest-Abfragen erhält, dann ist die SLA und Leistung der oben genannten Abfragen wesentlich . Die folgenden Aufzählungspunkte sollen Ihnen bei der Auswahl des für Ihre Anforderungen am besten geeigneten Ansatzes behilflich sein:

  • Ngram- oder Edge-Ngram-Token erhöhen die Indexgröße erheblich und bieten die Grenzen von Min- und Max-Gramm je nach Anwendung und Kapazität. Die Planung würde erhebliche Probleme in der Produktion ersparen.
  • Das Zulassen von Abfragen mit leeren oder wenigen Zeichenpräfixen kann alle Dokumente in einem Index aufrufen und kann einen gesamten Cluster zum Absturz bringen. Es ist immer eine bessere Idee, Präfixabfragen nur für den n-ten Begriff (für wenige Felder) durchzuführen und die Mindestzeichen in Präfixabfragen zu begrenzen.
  • Der bereitgestellte Datentyp “Suchen während der Eingabe” kennzeichnet den Eingabetext in verschiedenen Formaten. Da es sich um eine von ES bereitgestellte Lösung handelt, die nicht alle Anwendungsfälle abdecken kann, ist es immer eine bessere Idee, alle für Ihren geschäftlichen Anwendungsfall erforderlichen Eckfälle zu überprüfen. Darüber hinaus werden, wie bereits erwähnt, Felder in mehreren Formaten mit Token versehen, wodurch die Größe des Elasticsearch-Indexspeichers erhöht werden kann.
  • Completion schlägt vor, die Vorschläge separat zu indizieren, und ein Teil davon befindet sich noch im Entwicklungsmodus und befasst sich nicht mit dem Anwendungsfall des Abrufs der Suchergebnisse.
  • Indexzeitansätze sind schnell, da während der Abfragezeit weniger Overhead entsteht, aber sie beinhalten mehr Grunzarbeit, wie Neuindizierung, Kapazitätsplanung und erhöhte Festplattenkosten. Abfragezeit ist einfach zu implementieren, aber Suchanfragen sind teuer. Dies ist sehr wichtig zu verstehen, da Benutzer meistens einen von ihnen auswählen müssen, und zu verstehen, dass dieser Kompromiss bei der Fehlerbehebung bei Leistungsproblemen hilfreich sein kann.

Verschiedenes

In den meisten Fällen berücksichtigen die von ES bereitgestellten Lösungen für die automatische Vervollständigung entweder keine geschäftsspezifischen Anforderungen oder haben Auswirkungen auf die Leistung großer Systeme, da es sich nicht um Einheitslösungen handelt. In den meisten Fällen müssen Benutzer Anpassungen vornehmen, um die optimierte Lösung zu erhalten (performanter und fehlertoleranter), und der Umgang mit Elasticsearch-Leistungsproblemen ist nicht trivial. Opster hilft, sie frühzeitig zu erkennen und bietet Unterstützung und die notwendigen Tools, um sie effektiv zu debuggen und zu verhindern.

Für weitere Informationen lesen Sie bitte :

  1. Opsters Leitfaden zur Erhöhung der Suchlatenz, um Einblicke zu gewinnen und die Leistung zu verbessern.
  2. Opsters Anleitung zur Verwendung von langsamen Suchprotokollen zum schnellen Debuggen langsamer Suchprobleme

Elasticsearch-Leistung verbessern

Analyse ausführen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.