Shopware 6 Performance Blog
Shopware 6 Elasticsearch: Vorteile, Integration & Einsatzmöglichkeiten Shopware 6 Elasticsearch: Vorteile, Integration & Einsatzmöglichkeiten

Shopware 6 Elasticsearch: Vorteile, Integration & Einsatzmöglichkeiten

Viele haben im Zusammenhang mit Performance Optimierung sicher schon einmal von Elasticsearch gehört – dem leistungsstarken Suchtool, das in der Welt des E-Commerce und darüber hinaus einen festen Platz hat. Doch was steckt eigentlich genau dahinter? Und wie kann Elasticsearch dabei helfen, die Performance eines Shops zu steigern?

In diesem Beitrag möchte ich Dir erklären, was Elasticsearch ist, wo es eingesetzt werden kann und wie es insbesondere in Verbindung mit Shopware 6 einen echten Unterschied machen kann. Schließlich bleibt die spannende Frage: Lohnt sich der Einsatz auch für Deinen Shop? Lass uns das gemeinsam herausfinden!


Was ist Elasticsearch/ Opensearch?

Elasticsearch ist eine leistungsstarke, verteilte Such- und Analytics-Engine, die ursprünglich von der Firma Elastic entwickelt wurde. Es basiert auf Apache Lucene und wird vor allem eingesetzt, um große Datenmengen schnell und effizient zu durchsuchen, zu analysieren und aufzubereiten. Egal ob in E-Commerce-Shops, für Log-Analysen, Anwendungs-Monitoring oder sogar für Machine Learning – Elasticsearch ist vielseitig und robust. Besonders für Online-Shops wie diejenigen auf Shopware 6 bietet es eine Möglichkeit, Kunden in Sekundenschnelle relevante Suchergebnisse zu liefern und so die Nutzererfahrung entscheidend zu verbessern.

Die zentralen Merkmale des Tools:

  • Blitzschnelle Suche: Dank Volltextsuche und Unterstützung für Synonyme, Autovervollständigung oder Fehlerkorrektur.
  • Skalierbarkeit: Es lässt sich problemlos in Cluster aufteilen, um mit steigenden Datenmengen mitzuwachsen.

Und was ist OpenSearch?

Neben Elasticsearch hört man auch öfter den Namen OpenSearch. OpenSearch ist eine Open-Source-Abspaltung (Fork) von Elasticsearch. Die Entwicklung begann 2021, als Elastic die Lizenz änderte (von Apache 2.0 zu einer proprietären Lizenz). Diese Entscheidung veranlasste Amazon Web Services (AWS), die letzte Open-Source-Version als Basis zu nehmen und OpenSearch als eigenständiges Projekt zu starten.

Die beiden Technologien sind sich technisch sehr ähnlich, da OpenSearch auf einer früheren Version von Elasticsearch aufbaut.

Was bedeutet das für Dich?

Aktuell ist es egal, ob Du Elasticsearch oder Opensearch einsetzt, da sich beide Tools funktionell kaum unterscheiden. Da Opensearch weiterhin Open-Source bleibt und von der Community unterstützt wird, wird das Tool in Zukunft sicher interessanter werden.


Wo kann Elasticsearch in Shopware 6 eingesetzt werden?

Elasticsearch kann in vielen Bereichen eingesetzt werden, in denen schnelle und effiziente Suchprozesse gefragt sind. Oft wird das Potenzial der Technologie unterschätzt, da viele nur an die klassische Produktsuche denken. Im Folgenden zeige ich, wo Elasticsearch tatsächlich sinnvoll eingesetzt werden kann.

1. Produktsuche: Der Klassiker

Die Produktsuche ist wohl der bekannteste Anwendungsfall für Elasticsearch. Kunden erwarten, dass sie in Sekundenbruchteilen die gewünschten Artikel finden – und das inklusive Funktionen wie Autovervollständigung, Synonymen oder Rechtschreibkorrektur. Hier spielt das Tool seine Stärke aus und sorgt für ein schnelles, intuitives Sucherlebnis.

elasticsearch suche

2. Produktlisting-Seiten: Mehr als nur Suche

Viele denken, dass Elasticsearch nicht nötig ist, wenn bereits ein Tool wie Doofinder für die Suche genutzt wird. Dabei vergessen sie, dass auch Produktlisting-Seiten technische Suchprozesse sind. Im Hintergrund muss das System alle Produkte einer bestimmten Kategorie suchen und anzeigen. Wenn dann noch Filter hinzukommen – beispielsweise nach Preis, Farbe oder Lagerbestand – können lange Ladezeiten entstehen. Elasticsearch hilft hier, diese Prozesse zu optimieren und sorgt für schnelle Ladezeiten selbst bei komplexen Anforderungen.

3. Filterung und Navigation

In Verbindung mit Filtern zeigt Elasticsearch eine seiner größten Stärken. Ob Preisbereiche, Größen oder Verfügbarkeiten – all diese Informationen werden blitzschnell verarbeitet und angezeigt. Besonders bei großen Produktkatalogen oder anspruchsvollen Nutzern ist dies entscheidend, um Frust und Absprünge zu vermeiden.

elasticsearch nav

4. Administration: Schnelle Suche im Backend

Nicht nur Kunden profitieren von Elasticsearch – auch im Backend eines Shops kann es eine echte Hilfe sein. Suchprozesse wie die Suche nach Bestellungen, Kunden oder Produkten laufen mit dem Such-Tool wesentlich schneller ab. Besonders in Shops mit großen Datenmengen verbessert dies die Performance und steigert die Effizienz der Verwaltungsaufgaben.

elasticsearch admin

Elasticsearch vs. MySQL: Wann lohnt sich der Umstieg?

Ein Shopware-Shop funktioniert grundsätzlich mit einer MySQL-Datenbank. Hier werden alle Produktdaten, Kategorien und weiteren Inhalte gespeichert, und auch Suchprozesse können standardmäßig über MySQL abgebildet werden. Doch wann stößt MySQL an seine Grenzen – und wann lohnt es sich, Elasticsearch als Ergänzung ins Spiel zu bringen?

MySQL: Leistungsfähig, aber begrenzt

Grundsätzlich kann MySQL bei wenigen Datensätzen sehr schnelle Such-Querys durchführen. Problematisch wird es erst, wenn die Anzahl der Einträge in einer Tabelle sehr groß wird.

In einem solchen Fall hat MySQL aber die Möglichkeit auf bestimmte Spalten einen sogenannten Index zu setzten. Einen Index kann man allerdings nur auf bestimmte Typen (z.B. eine UUID, eine Zahl etc.) setzten. Bei einer Text-Spalte ist es leider nicht möglich.

Beispiel: Index auf z.B. ID, auto_increment etc.

Wenn wir uns als Beispiel einen Datenbank-Query anschauen, bei dem wir nach einer bestimmten ID suchen, so ist dieser Query trotz großer Menge an Einträgen sehr performant, weil die ID-Spalte vorher mit einem Index versehen wurde.

Schauen wir uns aber einen Datenbank-Query an, der eine Textspalte durchsucht – um z.B. alle Einträge die in der Spalte den String “ABC” enthalten zu holen – so kann MySQL nicht auf einen Index zugreifen und muss einen sogenannten “Full Table Scan” durchführen, der zu sehr hohen Ladezeiten führen kann.

Hier zeigt MySQL Schwächen, die Elasticsearch ausgleichen kann.

Elasticsearch: Die Ergänzung für große Datenmengen

Elasticsearch kommt ins Spiel, wenn große Datenmengen durchsucht oder komplexe Filter und Sortierungen benötigt werden. Durch die Auslagerung dieser Prozesse an Elasticsearch können Ladezeiten drastisch verkürzt werden. Wo MySQL bei nicht indexierbaren Feldern ins Stocken gerät, glänzt das Tool mit seiner Geschwindigkeit und Effizienz.

In einigen Fällen konnten wir bei unseren Kunden die Ladezeiten im Listing von über 10 auf 2-3 Sekunden nur durch den Einsatz von Elasticsearch reduzieren.

Grenzen und Nachteile von Elasticsearch

Komplexität
Elasticsearch funktioniert nicht “out of the box”. Es muss konfiguriert, eingerichtet und in die Shopware-Umgebung integriert werden. Das macht die Architektur komplexer und birgt potenzielle Fehlerquellen.

Höhere Hosting-Kosten
Die Such-Software ist speicherhungrig und benötigt mehr RAM als MySQL. Das schlägt sich in höheren Serverkosten nieder – insbesondere bei großen Datenmengen.

Inkompatibilität mit Plugins
Drittanbieter-Plugins arbeiten nicht immer reibungslos mit Elasticsearch. In einem Fall mussten wir für ein Plugin, das individuelle Sortierungen unterstützt, eine Custom Extension schreiben, um die Funktionalität anzupassen. Das Ergebnis war jedoch überzeugend: Die Ladezeit sank drastisch.

Unterschiedliche Ergebnisse
Elasticsearch kann manchmal andere Ergebnisse liefern als MySQL – etwa bei Gruppierungen (groupBy). Das erfordert zusätzliche Tests und Anpassungen.

Kein Hauptspeicher
Wichtig: Elasticsearch ist nicht als primärer Datenspeicher gedacht. Die Hauptdatenbank bleibt MySQL. Das Tool dient als Ergänzung, um Such- und Filterprozesse zu beschleunigen, nicht um Daten dauerhaft zu speichern.

Fazit: MySQL oder Elasticsearch?

Für kleine Shops oder einfache Anforderungen reicht MySQL oft aus. Sobald jedoch komplexe Suchprozesse, Filter oder große Datenmengen ins Spiel kommen, kann Elasticsearch den entscheidenden Unterschied machen. Trotz der höheren Komplexität und Kosten lohnt sich der Einsatz häufig – insbesondere, wenn Ladezeiten und Benutzererfahrung optimiert werden sollen. Die Wahl zwischen MySQL und Elasticsearch ist daher weniger ein Entweder-oder, sondern vielmehr eine Frage der Kombination ihrer Stärken.


Wie funktioniert die Elasticsearch-Integration in Shopware?

Shopware bietet eine nahtlose Elasticsearch-Integration sowohl für die Storefront als auch für die Administration. Diese Integration basiert im Wesentlichen auf einer Erweiterung des Indexierungsprozesses, wodurch Produktdaten effizient in den Elasticsearch-Index übertragen werden. Doch wie funktioniert das im Detail?

Erweiterung des Indexierungsprozesses

Die Grundlage der Elasticsearch-Integration in Shopware ist der Indexierungsprozess.

  • Wenn Produktdaten geändert werden oder der Indexierungsbefehl manuell angestoßen wird, aktualisiert Shopware die betroffenen Produktdaten automatisch im Elasticsearch-Index.
  • Dadurch sind die Suchdaten immer aktuell und auf dem neuesten Stand.

Damit Elasticsearch genutzt werden kann, muss lediglich eine ES-Instanz auf dem Server bereitgestellt und konfiguriert werden.

Datenabfrage: DAL-Repository als Basis

In Shopware werden Produktdaten über das Product-DAL-Repository abgefragt. Dieses Repository basiert entweder auf dem EntityRepository (für generelle Datenabfragen) oder dem SalesChannelRepository (für Storefront-spezifische Abfragen).


Die Search-Funktion in diesen Klassen funktioniert dabei in zwei Schritten:

  1. IDs abfragen: Zunächst wird über ein “searchIds”-Query auf Basis eines Criteria-Objekts eine Liste der Produkt-IDs ermittelt.
  2. Daten laden: Im zweiten Schritt werden die Daten der Produkte mithilfe der IDs aus der MySQL-Datenbank geholt.

Wie Elasticsearch in den Prozess eingreift

Elasticsearch wird über einen Service-Decorator in den Suchprozess integriert. Dabei übernimmt das Tool den ersten Schritt: die Suche nach IDs. Diese erfolgt dann vollständig über den ES-Index und nicht über MySQL, was die Geschwindigkeit der Abfragen erheblich steigert.

Der zweite Schritt, das Laden der Daten über die IDs (der sogenannte Read-Part), bleibt jedoch weiterhin über MySQL implementiert. So kombiniert Shopware die Stärken von MySQL als Hauptspeicher und Elasticsearch als Such-Engine, ohne die bestehende Datenstruktur vollständig zu ersetzen.

Wichtig ist, zu verstehen, dass auch mit Elasticsearch die Datenbank noch teilweise benutzt wird. Daher ist es auch wichtig, die Performance Deiner MySQL-Datenbank allgemein zu verbessern. Schau dazu in meinem anderen Beitrag dazu vorbei.


Ist Elasticsearch für meinen Shop sinnvoll?

Ob Elasticsearch für Deinen Shop eine sinnvolle Ergänzung ist, hängt von mehreren Faktoren ab. Als grobe Faustregel gilt: Ab ca. 30.000 Produkten (inklusive Varianten) lohnt sich der Einsatz, um die Performance zu optimieren. Aber auch bei kleineren Shops kann das Such-Tool sinnvoll sein, wenn bestimmte Anforderungen vorliegen.

Wann lohnt sich Elasticsearch auch bei kleineren Shops?

Einige Szenarien machen “ES” bereits vor der 30.000-Produkt-Marke interessant:

  • Filter und Sortierungen mit Custom Fields: Wenn Deine Produktlistings stark auf benutzerdefinierte Felder (Custom Fields) angewiesen sind, kann die Datenbankleistung schnell an ihre Grenzen stoßen.
  • Zeitaufwändige Aggregationen: Besonders das Aggregieren von Daten, etwa beim Anwenden von Filtern, kann viel Zeit in Anspruch nehmen. Elasticsearch bietet hier eine deutlich schnellere Alternative zur klassischen Datenbankabfrage.

Analyse der Performance mit Tools wie Tideways

Um präzise festzustellen, ob Elasticsearch für Deinen Shop nötig ist, empfiehlt sich der Einsatz eines Analyse-Tools wie Tideways. Damit kannst Du genau nachvollziehen, wo Performance-Probleme liegen:

  1. Trace triggern: Mit Tideways kannst Du einen sogenannten Trace für eine bestimmte Seite oder Funktion auslösen.
  2. Bottlenecks identifizieren: Das Tool zeigt Dir detailliert, welche Datenbankabfragen am meisten Zeit in Anspruch nehmen.
    • Wenn hier viele oder langsame Produkt-Datenbank-Queries auftauchen, ist das ein deutlicher Hinweis darauf, dass Elasticsearch Abhilfe schaffen könnte.
tideways elasticsearch test

Elasticsearch in Shopware 6: So richtest Du es ein

Die Einrichtung erfordert einige Vorbereitungen.

1. Elasticsearch Instanz auf dem Server

Um Loszulegen, brauchst du Elasticsearch mindestens in der Version 7.8 oder höher (alternativ OpenSearch 1.0 oder höher). Sprich hierzu am besten mit Deinem Hoster, damit er Dir alles nötige installiert. Shopware hat zu den Server Basics in der Dokumentation auch mehr Infos, die bei der Installation beachtet werden sollten.

2. Elasticsearch in Shopware 6 aktivieren

Sobald Elasticsearch auf Deinem Server läuft, kannst Du die Integration in Shopware 6 aktivieren. Stelle hierfür zunächst sicher, dass die ES-Instanz erreichbar ist. Bei mir kann ich das mit einem einfachen curl localhost:9500 herausfinden und erhalte folgendes Ergebnis:

Im nächsten Schritt setzten wir folgende Variablen in unserer .env Datei:

OPENSEARCH_URL="localhost:9500"
SHOPWARE_ES_ENABLED="1"
SHOPWARE_ES_INDEXING_ENABLED="1"
SHOPWARE_ES_INDEX_PREFIX="sw"
SHOPWARE_ES_THROW_EXCEPTION=1

Nachdem der Cache geleert wurde, starte ich die initiale Indexierung über “bin/console es:index”. Nachdem die Indexierung abgeschlossen ist, sollte die Einrichtung abgeschlossen sein.

Optional richten wir bei unseren Kunden noch nachts einen vollständigen Reset und eine Neuindexierung ein, das ist aber nicht zwingend erforderlich, weil Änderungen an den Produkten automatisch in den Index kommen sollten.

3. Integration testen

Nachdem die Integration abgeschlossen ist, ist es wichtig, zu testen, ob Elasticsearch auch korrekt benutzt wird oder wir noch einen Fehler durch z.B. ein Plugin aus dem Store haben.

Am einfachsten ist der Test mit Tideways. Hier triggere ich einen Trace und kann mir im Callgraph anschauen, ob der ES-EntitySearcher Service auch korrekt benutzt wird.

tideways elasticsearch used

4. Logs im Auge behalten

Neben den Tests am Tag der Einrichtung ist es wichtig, die Logs die nächsten Tage im Auge zu behalten, um sicherzugehen, dass im Nachhinein nicht noch Fehler auftreten.

Die Logs liegen im Standard Log-Ordner von Shopware und beginnen mit “elasticsearch”.


Elasticsearch in der Shopware 6 Administration

In der Administration wird Elasticsearch nur für die Haupt-Suche im Header verwendet. Dies betrifft Suchanfragen nach Produkten, Bestellungen oder anderen zentralen Entitäten.

Im Vergleich zur Storefront-Integration ist die Funktionalität in der Administration rudimentärer. Sie hilft nur in der Suche, aber nicht im “Listing” der Bestellungen. Nichts desto trotz ist eine simple Integration besser als gar keine, wenn man mit langen Ladezeiten zu kämpfen hat.

Wann ist der Einsatz von Elasticsearch im Admin sinnvoll?

Grundsätzlich immer dann, wenn man mit den Ladezeiten der Suche unzufrieden ist, was schnell bei größeren Kunden mit mehreren hunderttausend bis millionen Datensätzen auftritt.

Grenzen von Elasticsearch im Admin

Wie oben angesprochen, ist die Implementation im Admin recht simpel. Wir hatten bereits Kunden, die wegen zu vielen Bestellungen generell Probleme im Admin hatten, die nicht nur die Header-Suche betroffen haben. Gerade die Bestell-Statistiken, welche über ein Store-Plugin gelöst wurden, waren so langsam, dass es nach Minuten zu einem Timeout kam und keine Daten mehr eingesehen werden konnten.

Als Lösung haben wir eine eigene Integration für die Administration geschrieben, die ähnlich wie im Storefront an verschiedenen Stellen im Admin flexibel eingesetzt werden kann.

Elasticsearch in der Administration verwenden

Grundsätzlich ist die Einrichtung sehr ähnlich. Wir brauchen eine Elasticsearch Instanz vom Hoster und setzten folgende Werte in der .env:

ADMIN_OPENSEARCH_URL=localhost:9500
SHOPWARE_ADMIN_ES_ENABLED=1
SHOPWARE_ADMIN_ES_REFRESH_INDICES=1
SHOPWARE_ADMIN_ES_INDEX_PREFIX=sw-admin

Nach einem Cache-Clear können wir die Indexierung über den Befehl “bin/console es:admin:index” anstoßen. Ähnlich wie im Storefront ist ein Test und ein anschließendes Monitoring der Log-Files sinnvoll.


Fazit zu Elasticsearch in Shopware 6

Elasticsearch ist ein mächtiges Tool, das speziell bei großen Datenmengen und komplexen Such- oder Filteranforderungen in Shopware 6 deutliche Vorteile bietet. Ob in der Storefront für blitzschnelle Produkt- und Filterabfragen oder in der Administration zur Beschleunigung von Suchprozessen – die Einsatzmöglichkeiten sind vielfältig.

Allerdings bringt Elasticsearch auch Komplexität mit sich: von der Einrichtung einer passenden Server- und Cluster-Architektur bis hin zu möglichen Inkompatibilitäten mit Drittanbieter-Plugins. Für kleine Shops mit wenigen Produkten ist der Standard-Datenbankansatz oft ausreichend, während größere Shops oder solche mit individuellen Anforderungen wie Custom Fields oder Statistik-Plugins von Elasticsearch profitieren können.

Letztlich ist Elasticsearch keine universelle Lösung, sondern eine Ergänzung, die sorgfältig auf die spezifischen Bedürfnisse Deines Shops abgestimmt werden sollte. Mithilfe von Analyse-Tools wie Tideways kannst Du mögliche Performance-Bottlenecks identifizieren und fundiert entscheiden, ob Elasticsearch für Deinen Shop die richtige Wahl ist. Mit einer gut geplanten Integration kannst Du nicht nur Ladezeiten reduzieren, sondern auch das Nutzererlebnis und die Effizienz im Admin-Bereich deutlich verbessern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert