30.07.2025

Sprachanalyse in Elasticsearch: Von der Volltextsuche zur Relevanzsuche

Wir geben Begriffe in Suchfelder ein und erhalten Resultate. Doch was geschieht dabei im Hintergrund? Wie funktioniert eine Suche mittels Elasticsearch?

Wenn man sich das erste Mal mit Elasticsearch beschäftigt, wirkt vieles einfach: Man hat Dokumente, stellt eine Suchanfrage und bekommt Ergebnisse. Doch schon einfache Beispiele zeigen, dass hinter der Suche deutlich mehr steckt – besonders, wenn es darum geht, wirklich relevante Treffer zu erhalten. 

Weil das Thema umfangreich und vielschichtig ist, widmen wir uns ihm in einer dreiteiligen Blogserie. In diesem ersten Teil geht es um die Grundlagen der Textanalyse – also darum, wie Elasticsearch Inhalte versteht und wie wir die Relevanz durch gezielte Sprachanalyse verbessern können. 

Relevanz ist kein Zufall: Warum gute Suche mehr braucht als ein Query

Schauen wir uns ein konkretes Beispiel an: Zwei Blogbeiträge, wie sie in Elasticsearch abgespeichert sein könnten. Zur Vereinfachung konzentrieren wir uns auf die Felder «title» und «lead» – also Titel und Vorspann der Beiträge. In Elasticsearch werden solche Einträge als «Dokument» bezeichnet:

Dokument 1: 


«title»: «Suche mit Elasticsearch» 
    «lead»: «Wie können Sie die Suche mit Elasticsearch verbessern? Welche Herausforderungen sollten Sie dabei beachten?» 

 

Dokument: 2:  


«title»: «Optimierung von Webserver-Performance» 
«lead»: «Welche Massnahmen können Sie ergreifen, um die Performance Ihrer Webseite zu optimieren?» 

 

Jetzt stellen wir eine vermeintlich passende Suchanfrage, die sowohl Titel wie auch Lead mit dem Suchbegriff «Optimierung von Suchen» durchsucht. 


        «query»: { 
                     «multi_match»: { 
                                «query»: «Optimierung von Suchen», 
                                «fields»: [ «title^2», «lead»] 
                     } 
           }     

 

Das Ergebnis überrascht: Nur Dokument 2 wird gefunden – obwohl Dokument 1 sich explizit mit der Verbesserung der Suche beschäftigt. Woran liegt das?

 

Die Sache mit der Sprache

Elasticsearch ist nicht «sprachverstehend» im klassischen Sinne. Stattdessen wird die Suchanfrage wie auch der zu durchsuchende Text zunächst in sogenannte Tokens zerlegt. Dieser Vorgang nennt sich Analyse. 

Dabei wird ohne spezielle Massnahmen der Text in den Dokumenten und der Suchanfrage in Einzelworte zerlegt und kleingeschrieben. 

Aus der Suchanfrage wird entsprechend: «optimieren», «von», «suchen» 

Wenn wir nun die vorhandenen Dokumente auf dieselbe Art analysieren, bekommen wir folgende Aufstellung: 

 

Dokument 1: 

 

Für den Titel: «suche», «mit», «elasticsearch» 

 

Für den Inhalt: «wie», «können», «sie», «die», «suche», «mit», «elasticsearch», «verbessern», «welche», «herausforderungen», «sollten», «sie», «dabei», «beachten» 

 

Dokument 2: 

 

Für den Titel: «optimierung», «von», «webserver», «performance» 

 

Für den Inhalt:  «welche», «massnahmen», «können», «sie», «ergreifen», «um», «die», «performance», «ihrer», «webseite», «zu», «optimieren» 

 

Die Begriffe, die bei der Suche gefunden werden, sind fett markiert.   

Was dabei auffällt: «suchen» – eigentlich der zentrale Begriff der Anfrage – wird gar nicht gefunden. Stattdessen sorgt ausgerechnet das eher unwichtige Wort «von» für einen Treffer. Die Konsequenz: Das falsche Dokument wird gefunden. 

Wie können wir die Analyse so verbessern, dass solche Missverständnisse nicht mehr passieren?

Verbesserung durch sprachspezifische Analyse

Die bisherige Analyse nutzt den Standard-Analyzer von Elasticsearch – dieser ist zwar solide und funktioniert für einfache Fälle, ist aber nicht auf die deutsche Sprache optimiert. Das äussert sich in typischen Problemen, dass z. B. Singular und Plural nicht zusammengeführt werden, zusammengesetzte Wörter nicht aufgelöst werden und Stoppwörter wie «von» oder «die» nicht gefiltert werden.  

Um bessere Ergebnisse für deutsche Inhalte zu erzielen, kann man stattdessen einen deutschen Sprach-Analyzer konfigurieren. Dieser besteht aus mehreren Komponenten, die gemeinsam dafür sorgen, dass die Suchanfrage und die Dokumente sprachlich «intelligenter» verarbeitet werden. 

Ein Beispiel für eine sinnvolle Konfiguration sieht so aus: 


  «settings»: { 
    «analysis»: { 
      «filter»: { 
        «german_stop»: { 
          «type»: «stop», 
          «stopwords»: «_german_» 
        }, 
        «german_stemmer»: { 
          «type»: «stemmer», 
          «language»: «light_german» 
        } 
      }, 
      «analyzer»: { 
        «german»: { 
          «tokenizer»: «standard», 
          «filter»: [ 
            «lowercase», 
            «german_stop», 
            «german_normalization», 
            «german_stemmer» 
          ] 
        }, 

      } 
    } 
  } 

 

Was machen diese Komponenten genau? 
  • lowercase 
    Wandelt alle Begriffe in Kleinbuchstaben um – das ist Standard und vermeidet die Unterscheidung bei der Gross-/Kleinschreibung. 
  • german_stop 
    Entfernt häufige, wenig aussagekräftige Wörter wie «von», «und», «die», «der», «das» usw. Das reduziert den «Rauschanteil» in der Suche und sorgt dafür, dass wichtige Begriffe mehr Gewicht bekommen. 

Nach der Anwendung der ersten zwei Filter besteht das Dokument 1 noch aus folgenden Tokens: 

«suche», «elasticsearch», «verbessern», «herausforderungen», «sollten», «dabei», «beachten» 

  • german_normalization 
    Kümmert sich um sprachtypische Besonderheiten im Deutschen, z. B. Vereinheitlichung von Umlauten (ä, ae → a) oder scharfen ß.  
  • german_stemmer 
    Der sogenannte Stemmer reduziert Wörter auf ihren Wortstamm. So werden «optimiert», «optimieren», «Optimierung» zu einer einheitlichen Form, etwa «optimi». Das erhöht die Treffergenauigkeit deutlich, ohne dass alle Wortformen manuell berücksichtigt werden müssen.

Nach der Anwendung dieser zwei Filtern besteht das Dokument 1 aus folgenden Tokens: 

«such», «elasticsearch», «verbess», «herausforderung», «sollt», «dabei», «beacht» 

 

Mit dieser Konfiguration würden Begriffe wie «Suchen» und «Suche», oder «Optimieren» und «Optimierung» nicht mehr als verschiedene Wörter behandelt – sondern richtigerweise als sprachlich verwandte Begriffe. 

Durch die Anwendung der Sprachanalyse ergibt sich ein deutlich besseres Suchergebnis für die Abfrage «Optimierung von Suchen»: Jetzt werden beide Dokumente gefunden – und Dokument 1, das thematisch am besten passt, erscheint an erster Stelle. 

Rüebli oder Karotte?

Ein weiteres häufiges Problem bei der Suche mit Elasticsearch ist der Umgang mit Synonymen. Unterschiedliche Benutzer verwenden oft verschiedene Begriffe für denselben Sachverhalt. Wenn diese Begriffe im Index nicht vorkommen, wird das gewünschte Dokument unter Umständen nicht gefunden. Gerade in der Schweiz sind Helvetismen, also schweizerische Spracheigentümlichkeiten, ein gutes Beispiel für Begriffe, die mit einer Synonymliste abgedeckt werden können. Beispielsweise wird eine Suche nach «Rüebli» keine Ergebnisse liefern, wenn in den Daten von «Karotte» die Rede ist. 

Sucht man nach «Website» oder «Geschwindigkeit Server», gibt es keine Treffer. Dabei sind die Inhalte sprachlich nah verwandt. Doch ohne gezielte Konfiguration erkennt Elasticsearch keine Verbindung. Begriffe wie «Webseite» und «Webserver» oder «Performance» und «Geschwindigkeit» sind für das System nicht automatisch Synonyme. 

Elasticsearch bietet die Möglichkeit, mithilfe eines Synonymfilters alternative Begriffe bei der Indexierung oder der Suchanfrage zu berücksichtigen. Für unsere Dokumente eignen sich beispielsweise folgende Synonymdefinitionen: 

website, webseite 

performance, leistung, geschwindigkeit 

server, webserver 

 

Beispielsweise wird mit einer Suche nach «Website Geschwindigkeit» mit einem Synonymfilter automatisch auch «Webseite Performance» aus Dokument 2 gefunden, obwohl die Begriffe im Originaltext nicht wörtlich vorkommen. 

Die Arbeit mit Synonymen birgt aber auch Risiken. Zum Beispiel ungewollte Erweiterungen: Wird «Server» mit «Webserver» gleichgesetzt, könnte auch ein Dokument über «Mail-Server» auftauchen. Zudem muss die Liste gepflegt und regelmässig aktualisiert werden. 

Synonyme sind ein gutes Werkzeug, um die Relevanz und Trefferrate in der Suche zu verbessern. Eine kluge Konfiguration hilft dabei, bessere Resultate zu liefern, ohne zu viele irrelevante Treffer zuzulassen. 

Unser Tipp: Fokussieren Sie sich auf Begriffe, die in ihrem Geschäftsbereich wichtig sind und häufig vorkommen.

Der Donaudampfschifffahrtsgesellschaftskapitän

Eine Besonderheit der deutschen – und allgemein der germanischen – Sprachen sind Wortkompositionen, also zusammengesetzte Wörter. Ein Beispiel dafür ist das Wort «Webserver-Performance» aus Dokument 1. Sucht man jedoch nach «Webserverperformance» (ohne Bindestrich), wird dieses Dokument nicht gefunden. 

Der Grund: Aus «Webserver-Performance» werden die Tokens «webserv» und «performanc» gebildet. Aus dem Suchbegriff «Webserverperformance» hingegen entsteht das Token «webserverperformanc». Da sich diese Tokens nicht überschneiden, kann Elasticsearch keine Übereinstimmung erkennen. 

Elasticsearch kann zusammengesetzte Wörter ohne zusätzliche Konfiguration oder externe Software nicht automatisch zerlegen. 

Ein Bordmittel von Elasticsearch, um diesem Problem zu begegnen, ist der ngram-Filter. Mit diesem Filter lassen sich Tokens variabler Länge erzeugen. Bei einer ngram-Länge von 5 wird aus dem Begriff «Webserverperformance» folgende Tokenliste gebildet: 

«webse», «ebser», «bserv», …, «rmanc», «mance». 

Diese Token weisen Überschneidungen mit denen auf, die aus «Webserver-Performance» erzeugt wurden, wodurch eine gewisse Trefferquote erreicht wird. 

Der Nachteil: Die Suche wird unschärfer. Auch aus dem Wort «Webseite» würden ähnliche ngrams erzeugt – beispielsweise «webse» – die wiederum eine (unerwünschte) Übereinstimmung mit «Webserverperformance» ergeben könnten. 

Um diese Unschärfe zu reduzieren, ist eine gezielte Feinabstimmung der Suchanfragen erforderlich. Wie das funktioniert, wird im nächsten Blogbeitrag behandelt.

Fazit und Ausblick

Eine präzise und gut konfigurierte Sprachanalyse ist entscheidend, um die Qualität der Suchergebnisse in Elasticsearch deutlich zu verbessern. Bereits mit einfachen Mitteln wie sprachspezifischen Analyzern, Stoppwörtern, Stammwortbildung oder Synonymfiltern lässt sich die Relevanz der Treffer spürbar steigern. Wer seine Inhalte in deutscher Sprache indexiert, sollte keinesfalls auf diese Möglichkeiten verzichten – denn sie machen aus einer simplen Volltextsuche eine intelligente Informationssuche. 

Im nächsten Blogbeitrag gehen wir einen Schritt weiter: Dann steht die gezielte Konfiguration von Suchanfragen im Fokus. Dabei beleuchten wir, wie sich die Gewichtung einzelner Felder, das sogenannte Boosting und weitere Query-Strategien nutzen lassen, um die Relevanz noch besser zu steuern. 

Ein Thema, das wir in diesem Beitrag bewusst ausgeklammert haben, ist die Vektorsuche auf Basis von Sprachmodellen. Diese moderne Methode eröffnet ganz neue Möglichkeiten – verdient jedoch aufgrund ihrer Komplexität und ihres Potenzials einen eigenen Beitrag. 

Lesen Sie darüber mehr in Teil 2 – es lohnt sich.

Über den Autor

Nicolas Karrer ist Lead Application Engineer bei Snowflake. Neben seiner Begeisterung für neue Technologien ist er Snowflake Urgestein, Fussball- und Eishockeyfan, Squash-Spieler und TV-Serien-Junkie.