Zum Inhalt springen

OpenSearch in Shopware einrichten

Zuletzt geprüft Shopware

Ab einer gewissen Kataloggröße wird die MySQL-Standardsuche von Shopware zäh — OpenSearch übernimmt dann Produktsuche, Listings und Filter. Die Anbindung bringt Shopware 6 von Haus aus mit: ein paar Umgebungsvariablen, eine Indexierung, fertig. Dieser Artikel zeigt die Einrichtung auf unseren Servern.

  • Eine laufende OpenSearch-Instanz. Zwei Wege bei uns: selbst betrieben als Container auf deinem Server (gut für Staging und kleinere Kataloge) oder als Managed OpenSearch — dediziert, überwacht, mit Updates von uns. Die Einrichtung in Shopware ist in beiden Fällen identisch, nur die Adresse unterscheidet sich.
  • SSH-Zugang mit Zugriff auf bin/console — siehe SSH-Zugang einrichten.
  • Laufende Queue-Worker (messenger:consume): Die Indexierung läuft über die Message Queue — ohne Worker passiert nach dem Startbefehl schlicht nichts.
  1. Prüfe die Verbindung zur Suchinstanz — vom Shopware-Server aus:
    Terminal-Fenster
    curl http://127.0.0.1:9200
    Kommt JSON mit der Versions-Info zurück, steht die Verbindung. (Adresse und Port bei Managed OpenSearch entsprechend der Zugangsdaten aus dem Ticket.)
  2. Ergänze die .env (bzw. .env.local) im Shopware-Verzeichnis:
    Terminal-Fenster
    OPENSEARCH_URL=http://127.0.0.1:9200
    SHOPWARE_ES_ENABLED=1
    SHOPWARE_ES_INDEXING_ENABLED=1
    SHOPWARE_ES_INDEX_PREFIX=sw
    SHOPWARE_ES_THROW_EXCEPTION=1
    SHOPWARE_ES_THROW_EXCEPTION=1 lässt Fehler während der Einrichtung sichtbar auffliegen, statt leise auf MySQL zurückzufallen — nach erfolgreichem Umstieg auf 0 setzen, dann bleibt der Shop bei einem Suchausfall benutzbar.
  3. Nur bei Single-Node-Instanzen (das Container-Setup ist eine): Lege config/packages/elasticsearch.yml an, sonst wartet der Index ewig auf Replikate Replikat: Kopie eines Index auf einem weiteren Knoten. Auf einem einzelnen Knoten kann sie nie zugewiesen werden — der Cluster-Status bleibt dauerhaft yellow. , die es nie geben wird:
    elasticsearch:
    index_settings:
    number_of_shards: 1
    number_of_replicas: 0
  4. Leere den Cache, damit die neuen Variablen greifen:
    Terminal-Fenster
    bin/console cache:clear
  5. Stoße die Indexierung an:
    Terminal-Fenster
    bin/console es:index
    Der Befehl legt nur Aufträge in die Queue — die eigentliche Arbeit erledigen die Worker im Hintergrund. Je nach Kataloggröße dauert das von Minuten bis zu einer Stunde.
  6. Prüfe das Ergebnis, sobald die Queue leer ist:
    Terminal-Fenster
    curl "http://127.0.0.1:9200/_cat/indices?v"
    Deine sw_…-Indizes müssen den Status green und plausible Dokument-Zahlen zeigen. Fehlt der Alias noch, hilft bin/console es:create:alias nach.
  7. Teste die Storefront-Suche im Browser — Suchbegriffe, Kategorien, Filter. Ab jetzt beantwortet OpenSearch die Anfragen.

Der Befehl füllt nur die Queue — verarbeitet wird sie von den Workern. Läuft kein messenger:consume, bleibt die Indexierung liegen.

Lösung: Worker-Status prüfen und starten. Wie die Worker auf deinem Server eingerichtet sind, klärt im Zweifel ein Ticket — dauerhaft laufende Worker gehören zum Shopware-Grundsetup, nicht nur zur Suche.

No alive nodes found in your cluster oder Connection refused

Abschnitt betitelt „No alive nodes found in your cluster oder Connection refused“

Shopware erreicht die OpenSearch-Instanz nicht: Dienst down, falsche Adresse in OPENSEARCH_URL oder Tippfehler beim Port.

Lösung: Erst Schritt 1 wiederholen (curl), dann die .env gegenprüfen. Der ausführliche Diagnose-Fahrplan im Artikel „No alive nodes found” beheben ist für Magento geschrieben, passt aber eins zu eins.

Auf einer Single-Node-Instanz können Replikate nie zugewiesen werden — der Status wird nie green, und manche Warte-Logik läuft in Timeouts.

Lösung: Schritt 3 nachziehen (number_of_replicas: 0), dann den Index neu aufbauen: bin/console es:index und den Queue-Durchlauf abwarten.

Neue oder geänderte Produkte tauchen in der Suche nicht auf

Abschnitt betitelt „Neue oder geänderte Produkte tauchen in der Suche nicht auf“

Entweder ist SHOPWARE_ES_INDEXING_ENABLED auf 0 (Lese-Betrieb), oder die Update-Aufträge stauen sich in der Queue.

Lösung: Variable prüfen, Worker prüfen. Für den Komplett-Neuaufbau aller Indizes: bin/console dal:refresh:index --use-queue. Danach Shopware-Cache leeren, damit Listings nicht aus dem HTTP-Cache kommen.

Indexierung hängt, Suche liefert Unsinn oder unsicher, ob Container oder Managed OpenSearch zu deinem Katalog passt? Ticket im Kundencenter öffnen — nenn Shop-Domain und Shopware-Version, wir schauen gemeinsam drauf.