Shopware 6 Indizes per CLI Konsole aktualisieren ist im Grunde ein einfache Sache. In diesem Beitrag wollen wir zeigen wie einfach es genau ist und welche Dinge man beachten kann und sollte, wenn es doch einmal komplizierter wird.

Übersicht:

  1. Shopware 6 Indizes aktualisieren
  2. Welche Indizes werden aktualisiert
  3. Erläuterung der einzelnen Indizes und Variablen
  4. Wie lautet der Befehl
  5. Vorteile der Shopware CLI Konsole
  6. Aktualisierung der Indizes über den Shopware Admin Bereich
  7. Aktualisierung und Ausschluss einzelner Indizes (mit skip & only)
  8. Wann ist ein vollständiger Neuaufbau des Index nötig?
  9. Synchrone vs asynchrone Indexierung
  10. Hilfe ausgeben lassen
  11. Geheimwissen & mögliche Fehler
  12. Weiterführende Links und Quellen

1. Shopware 6 Indizes aktualisieren

In einem Shopware 6 System ist die Indizierung ein entscheidender Prozess, der die Datenbankstruktur optimiert und beschleunigt. Ein Index ist ein spezieller Speicherort innerhalb der Datenbank, der wichtige Informationen wie Produktnamen, Kategorien oder Preise in einer komprimierten Form bereithält. Wenn Daten im Shop hinzugefügt, verändert oder gelöscht werden – beispielsweise durch das Einpflegen neuer Produkte oder das Ändern von Preisen – müssen die Indizes aktualisiert werden, um sicherzustellen, dass diese Änderungen für den Nutzer sichtbar sind und schnell abgerufen werden können.

Die regelmäßige Aktualisierung der Indizes verbessert nicht nur die Performance, sondern stellt auch sicher, dass alle Informationen, die für die Navigation und Suche im Shop wichtig sind, stets auf dem neuesten Stand sind. So profitieren sowohl die Kunden von schnellen Ladezeiten und präzisen Suchergebnissen als auch das System von einer optimierten Datenstruktur.

2. Welche Indizes werden aktualisiert

Beim Aktualisieren der Indizes in Shopware 6 werden mehrere wichtige Datenbereiche und Funktionen des Shops auf den neuesten Stand gebracht. Hier sind die zentralen Bereiche, die durch die Indizierung abgedeckt werden:

  • Produktdaten – Alle Änderungen an Produkten, wie Preise, Bestände, Beschreibungen oder Verfügbarkeiten, werden bei der Indizierung aktualisiert. Dies stellt sicher, dass Kunden immer die korrekten Produktinformationen sehen, sei es bei der Suche, in Kategorien oder auf Produktdetailseiten.
  • Kategorien und Kategoriebäume – Änderungen an Kategorien, etwa neue Kategorien oder umstrukturierte Kategoriebäume, werden in die Indizes aufgenommen. Dadurch sind die Kategorien für Kunden immer schnell und korrekt verfügbar, was eine reibungslose Navigation im Shop ermöglicht.
  • SEO-URLs – Wenn sich die URL-Struktur aufgrund von Änderungen an Produkt- oder Kategoriedaten verändert, werden die SEO-optimierten URLs automatisch neu generiert. So bleibt der Shop auch bei größeren Änderungen suchmaschinenfreundlich und vermeidet veraltete Links, die die User Experience oder das Ranking negativ beeinflussen könnten.
  • Such- und Filterfunktionen – Die Indizes werden auch verwendet, um die Such- und Filterfunktionen zu optimieren. Neue oder geänderte Produkte und Kategorien erscheinen so direkt in den Suchergebnissen und lassen sich über Filter schneller finden.
  • Preise und Preisstaffelungen – Falls der Shop verschiedene Preisgruppen oder Staffelpreise verwendet, stellt die Indizierung sicher, dass diese Preise für alle Kunden korrekt angezeigt werden. So profitieren sowohl Endkunden als auch Händlerkunden von aktuellen Preisen, die automatisch an die Zielgruppe angepasst sind.
  • Media und Thumbnail-Verknüpfungen – Änderungen an Medieninhalten, wie Produktbildern oder Thumbnails, werden durch die Indizierung ebenfalls berücksichtigt. Das sorgt dafür, dass auf Produkt- und Kategorieseiten immer die passenden Bilder angezeigt werden und keine veralteten Medien im Cache bleiben.

Durch die Indizierung dieser verschiedenen Bereiche stellt Shopware 6 sicher, dass die Daten im gesamten Shop konsistent und aktuell bleiben. Das verbessert nicht nur die Performance des Shops, sondern auch die Benutzerfreundlichkeit und die Suchmaschinenoptimierung.

3. Erläuterung der einzelnen Indizes und Variablen

Wenn man den oben genannten Befehl durchlaufen läßt, dann werde alle diese Indizes hier aktualisiert, so dass ihr im Terminal eine längere Liste mit mehr oder weniger Fehlern angezeigt bekommt:

Indexer Erklärung
category.indexer Indiziert die Kategorien im Shop, einschließlich der SEO-URLs, sodass Änderungen in der Kategorie-Struktur schnell sichtbar werden.
– category.child-count Erstellt eine Übersicht der Anzahl an Unterkategorien.
– category.tree Erstellt ein Verzeichnis des Kategoriebereichs (Kategorien und ihre Unterkategorien).
– category.breadcrumb Erstellt einen Index für die Verwendung in der Breadcrumb-Navigation.
– category.seo-url Erstellt einen Index der SEO-URLs für die Kategorien.
customer.indexer Erstellt einen Suchindex für die Kunden.
– customer.many-to-many-id-field Unterstützungsaufgabe zur Verknüpfung von Tabellen.
flow.indexer Aktualisiert die Flows, die für die Automatisierung von Prozessen im Shop verwendet werden.
landing_page.indexer Aktualisiert die Landing-Pages, um sicherzustellen, dass alle Inhalte und Designs auf dem neuesten Stand sind.
– landing_page.many-to-many-id-field Unterstützungsaufgabe zur Verknüpfung von Tabellen.
– landing_page.seo-url Erstellt einen Index der SEO-URLs für die Landing Pages.
media.indexer Aktualisiert alle Medieninhalte, wie Bilder und Videos, um sicherzustellen, dass sie korrekt im Shop angezeigt werden.
media_folder.indexer Indiziert die Medienordner, die für eine organisierte Speicherung von Medieninhalten sorgen.
– media_folder.child-count Zählt die Unterordner innerhalb eines Medienordners.
media_folder_configuration.indexer Aktualisiert die Konfiguration der Medienordner, um sicherzustellen, dass alle Medieneinstellungen aktuell sind.
newsletter_recipient.indexer Aktualisiert die Empfängerliste für Newsletter, um sicherzustellen, dass nur aktuelle Adressen verwendet werden.
payment_method.indexer Indiziert die Zahlungsmethoden, um sicherzustellen, dass alle Zahlungsoptionen korrekt und aktuell sind.
product.indexer Indiziert alle Produktdaten, einschließlich Preis, Beschreibung, Verfügbarkeit und SEO-URLs, um eine schnelle Suche und Anzeige im Shop zu gewährleisten.
– product.inheritance Aktualisiert die Verknüpfungen zwischen Produkten und ihren Varianten.
– product.stock Indiziert den Lagerbestand der Produkte.
– product.variant-listing Erstellt einen Index aller Varianten innerhalb eines Produkts.
– product.child-count Zählt die Varianten innerhalb eines Produkts.
– product.many-to-many-id-field Unterstützungsaufgabe zur Verknüpfung von Tabellen.
– product.category-denormalizer Überprüft auf verwaiste Produkte in Kategorien (nicht funktionierende Links) und entfernt diese.
– product.cheapest-price Bestimmt den günstigsten Preis innerhalb eines Produkts.
– product.rating-averaget Ermittelt den Durchschnitt der Bewertungswerte aus den Produktrezensionen.
– product.stream Erstellt die Produktlisten für die dynamischen Produktgruppen.
– product.search-keyword Definiert eine Liste aller Suchbegriffe der Produkte.
– product.seo-url Erstellt eine Liste der SEO-URLs der Produkte.
product_manufacturer.indexer Indiziert die Daten der Produktanbieter, um sicherzustellen, dass Herstellerinformationen immer aktuell sind.
product_stream.indexer Erstellt einen Index der dynamischen Produktgruppen.
product_stream_mapping.indexer Erstellt eine Zuordnung zwischen Kategorien und dynamischen Produktgruppen.
promotion.indexer Aktualisiert die Promotions und Rabatte, um sicherzustellen, dass diese korrekt angezeigt und angewendet werden.
– promotion.exclusion Erstellt eine Liste von Ausschlüssen innerhalb der Promotions (nicht kombinierbar mit …).
– promotion.redemption Aktualisiert die Liste der von Kunden genutzten Promotions.
rule.indexer Indiziert alle Regeln, die im Shop für verschiedene Geschäftslogik verwendet werden, um deren Gültigkeit zu gewährleisten.
– rule.payload Erstellt einen Index der Bedingungen innerhalb der Regeln.
sales_channel.indexer Aktualisiert die Verkaufsstellen und deren Zuordnungen, um sicherzustellen, dass alle Verkaufskanäle korrekt funktionieren.
– sales_channel.many-to-many Unterstützungsaufgabe zur Verknüpfung von Tabellen.
theme.indexer Indiziert die Theme-Daten, um sicherzustellen, dass die Designanpassungen immer korrekt dargestellt werden.
netzp.blogpost.indexer Aktualisiert die Blogbeiträge und deren Einstellungen, um sicherzustellen, dass alle Inhalte aktuell sind.

Die letze Variable hat man natürlich nur in seinem Shop, wenn man das Netzperfekt Blog Plugin verwendet.
Die INdizes mit einem Bindestrich sind quasi Unter-Indizes. Das besondere: Es ist etwas komplizierter nur eine Gruppe aus der 2. Ebene anzusprechen. Mehr dazu weiter unten.

4. Wie lautet der Befehl

Kurze Rede, kurzer Sinn, der Befehl lautet schlicht und ergreifend:

php bin/console dal:refresh:index

Um diesen Befehl verwenden zu können müsst ihr euch über euer Terminal in den Shopware Ordner bewegen.

Bei mir geht das in der Regel so: Ich melde mich mit dieser Zeile Code erst. einmal auf dem Server an:

ssh k47s65.meinserver.io -l c836503_w7_ssh1

Dann werde ich aufgefordert das Passwort einzugeben und folge dem Befehl wie ein Roboter. Anschließend bin ich schonmal auf dem Server. Dann navigiere ich in den Shop Ordner und dann je nachdem auch noch einmal mit cd stageware1 in den Ordner einer Staging Umgebung.

Dort kann ich jetzt ohne weitere Umwege den Befehl eingeben und alle Indizes des Shops über die CLI Konsole aktualisieren.

5. Vorteile der Shopware CLI Konsole

Warum sollte man die Indizes in Shopware 6 über die Konsole aktualisieren?

Die Indizes in Shopware 6 zu aktualisieren, ist wichtig, um die Performance und Datenkonsistenz im Shop zu gewährleisten. Während es möglich ist, die Indizes über den Admin-Bereich neu zu generieren, bietet die Konsole (CLI) viele Vorteile, vor allem in größeren Shops. Hier sind die wichtigsten Gründe, warum die Aktualisierung der Indizes über die Konsole oft die bessere Wahl ist:

  • Performance – Das Aktualisieren der Indizes kann viel Rechenleistung in Anspruch nehmen, besonders bei umfangreichen Datenbeständen. Wenn die Indizierung über die Konsole durchgeführt wird, passiert dies direkt auf dem Server und ist oft schneller und ressourcenschonender, als die gleichen Vorgänge im Admin-Bereich auszuführen. Dadurch wird die Belastung für das Frontend reduziert und die Nutzererfahrung im Shop bleibt unbeeinträchtigt.
  • Vermeidung von Timeout-Problemen – Bei sehr großen Shops oder wenn viele Produkte, Kategorien oder Medien neu indiziert werden müssen, kann die Indizierung über den Admin-Bereich zu Timeout-Problemen führen. Über die CLI gibt es dieses Problem nicht, da die Befehle direkt auf dem Server ausgeführt werden und die Ausführungszeit hier keine Einschränkungen durch Browser- oder PHP-Limits hat.
  • Automatisierung und Flexibilität – Mit der CLI lassen sich Indizierungsprozesse leicht in automatisierte Abläufe, wie Cronjobs oder Deployment-Skripte, integrieren. So kannst du festlegen, dass die Indizes z.B. täglich oder wöchentlich automatisch aktualisiert werden, ohne manuell in den Admin-Bereich eingreifen zu müssen.
  • Fehlermeldungen und Debugging – Bei der Ausführung über die Konsole erhältst du oft detaillierte Fehlermeldungen und Statusinformationen, die bei Problemen mit der Indizierung hilfreich sind. Dies ist nützlich, um spezifische Fehler bei der Indizierung zu erkennen und zu beheben, bevor sie die Benutzererfahrung im Shop beeinträchtigen.
  • Ressourcenkontrolle bei großen Datenbeständen – Die Indizierung über den Admin-Bereich kann die Shop-Performance beeinträchtigen, da sie auf der gleichen Umgebung läuft wie die Benutzeranfragen. Über die Konsole kann man diese Vorgänge gezielt außerhalb der Hauptnutzungszeiten steuern oder bei hohem Datenvolumen an die Serverressourcen anpassen.
  • Schnellere Bearbeitung großer Datenmengen – Bei sehr vielen Produkten, Kategorien oder Kundendaten bietet die CLI eine deutlich schnellere Möglichkeit, die Indizes zu aktualisieren, da die Serverressourcen hier oft effizienter genutzt werden können. Das ist besonders hilfreich in Shops mit saisonalen Sortimentswechseln oder umfangreichen Datenimporten.

Die Verwendung der Konsole bietet also mehr Flexibilität, Stabilität und Kontrolle über den Indizierungsprozess, vor allem in großen oder häufig aktualisierten Shopware-Installationen.

6. Aktualisierung der Indizes über den Shopware Admin Bereich

Um die Indizes im Shopware Admin-Bereich zu aktualisieren, melde dich zuerst im Admin-Bereich an. Navigiere dann zu Einstellungen > Systemeinstellungen > Caches & Indizes. Dort findest du den Bereich für Indizes, in dem alle Indizes in einem Drop-Down-Menü aufgelistet sind.

Shopware 6 Admin - Cache und Indizes

Shopware 6 Admin – Cache und Indizes

Hier kannst du die Indizes auswählen, die du aktualisieren möchtest. Du hast die Möglichkeit, entweder alle Indizes auf einmal oder spezifische Indizes auszuwählen. Klicke anschließend auf die Schaltfläche Indizes aktualisieren, um den Aktualisierungsprozess zu starten. Warte, bis der Prozess abgeschlossen ist, und du wirst eine Benachrichtigung erhalten, wenn die Aktualisierung erfolgreich war.

Shopware 6 Indizes aktualisieren - 41 - Shopware Admin - Indizes Liste

Shopware 6 Indizes aktualisieren – 41 – Shopware Admin – Indizes Liste

Die Aktualisierung der Indizes über den Admin-Bereich ist eine benutzerfreundliche Möglichkeit, die Daten im Shop auf dem neuesten Stand zu halten, insbesondere nach Änderungen an Produkten, Kategorien oder anderen Inhalten.

7. Aktualisierung und Ausschluss einzelner Indizes (mit skip & only)

So jetzt wird es ein bißchen spannend. Denn es ist seit Shopware 6.4 sind 2 Dinge möglich, von denen alle User bis einschließlich 6.3 nur träumen durften.

  • Erstens: Mit dem --skip Befehl bestimmte Indizes ausschließen:
  • Zweitens: Mit dem --only Befehl nur ausgewählte Indizes zu aktualisieren

Wann macht so etwas Sinn? Ganz einfach wenn man schnell beispielsweise nur die Kategorie SEO-URLs (s. Screenshot oben) neu generieren möchte ohne dabei noch ewig die Aktualisierung der Produkte abzuwarten und den Server unnötig zu belasten.

Beispiele mit only:
Achtung: Der only Befehl kann nur bei den „Ober-Indizes“ verwendet werden. Wenn wir einen Blick oben in die Tabelle werfen, dann sind das diejenigen wo kein Bindestrich davor steht. Der Bindestrich gehört natürlich nicht zu der Variable dazu, sondern soll symbolisieren, dass es sich um eine Ebene unter der Haupt-Indize Gruppe handelt.

Nur Newsletter Empfänger:
php bin/console dal:refresh:index --only=newsletter_recipient.indexer

Nur den günstigsten Produkt-Preis (product.cheapest-price)

php bin/console dal:refresh:index --use-queue --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.seo-url,product.search-keyword"

Was passiert da genau? Wie eingangs beschrieben kann man den only Befehl nicht auf einen Unter-Indize anwenden. Daher schließen mit --only=product.indexer in erster Instanz alle anderen Ober-Indizes aus. Im nächsten Schritt überspringen / skippen wir dann alle Unter-Indizes vom product.indexer so dass nur noch der übrig bleibt, der nciht in der Liste erwähnt wird.

Nur die Produkt-SEO-URLs (product.seo-url)
php bin/console dal:refresh:index --use-queue --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword, product.cheapest-price"

Beispiele mit skip:

Überspringe Kategorie SEO-URLs:
php bin/console dal:refresh:index --skip=category.seo-url

Mehrere Bereiche überspringen:
php bin/console dal:refresh:index --skip "customer.indexer,landing_page.indexer,media.indexer,media_folder.indexer,media_folder_configuration.indexer,payment_method.indexer,product_stream.indexer,product_stream_mapping.indexer,promotion.indexer,rule.indexer,sales_channel.indexer,product.indexer,category.seo-url"

Und hier ist für jeden einzelnen Bereich der passende Befehl um nur spezifisch diesen einen Bereich anzupassen.

  • category.indexer: php bin/console dal:refresh:index --only=category.indexer

    • category.child-count: php bin/console dal:refresh:index --only=category.indexer --skip="category.tree,category.breadcrumb,category.seo-url"
    • category.tree: php bin/console dal:refresh:index --only=category.indexer --skip="category.child-count,category.breadcrumb,category.seo-url"
    • category.breadcrumb: php bin/console dal:refresh:index --only=category.indexer --skip="category.child-count,category.tree,category.seo-url"
    • category.seo-url: php bin/console dal:refresh:index --only=category.indexer --skip="category.child-count,category.tree,category.breadcrumb"
  • customer.indexer: php bin/console dal:refresh:index --only=customer.indexer

    • customer.many-to-many-id-field: php bin/console dal:refresh:index --only=customer.indexer
  • flow.indexer: php bin/console dal:refresh:index --only=flow.indexer
  • landing_page.indexer: php bin/console dal:refresh:index --only=landing_page.indexer

    • landing_page.many-to-many-id-field: php bin/console dal:refresh:index --only=landing_page.indexer --skip=landing_page.seo-url
    • landing_page.seo-url: php bin/console dal:refresh:index --only=landing_page.indexer --skip=landing_page.many-to-many-id-field
  • media.indexer: php bin/console dal:refresh:index --only=media.indexer
  • media_folder.indexer: php bin/console dal:refresh:index --only=media_folder.indexer

    • media_folder.child-count: php bin/console dal:refresh:index --only=media_folder.indexer
  • media_folder_configuration.indexer: php bin/console dal:refresh:index --only=media_folder_configuration.indexer
  • newsletter_recipient.indexer: php bin/console dal:refresh:index --only=newsletter_recipient.indexer
  • payment_method.indexer: php bin/console dal:refresh:index --only=payment_method.indexer
  • product.indexer: php bin/console dal:refresh:index --only=product.indexer

    • product.inheritance: php bin/console dal:refresh:index --only=product.indexer --skip="product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.stock: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.variant-listing: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.child-count: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.many-to-many-id-field: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.category-denormalizer: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.rating-averaget: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.stream,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.stream: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.search-keyword,product.cheapest-price,product.seo-url"
    • product.search-keyword: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.cheapest-price,product.seo-url"
    • product.cheapest-price: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.seo-url"
    • product.seo-url: php bin/console dal:refresh:index --only=product.indexer --skip="product.inheritance,product.stock,product.variant-listing,product.child-count,product.many-to-many-id-field,product.category-denormalizer,product.rating-averaget,product.stream,product.search-keyword,product.cheapest-price"
  • product_manufacturer.indexer: php bin/console dal:refresh:index --only=product_manufacturer.indexer
  • promotion.indexer: php bin/console dal:refresh:index --only=promotion.indexer

    • promotion.exclusion: php bin/console dal:refresh:index --only=promotion.indexer --skip="promotion.redemption"
    • promotion.redemption: php bin/console dal:refresh:index --only=promotion.indexer --skip="promotion.exclusion"
  • rule.indexer: php bin/console dal:refresh:index --only=rule.indexer

    • rule.payload: php bin/console dal:refresh:index --only=rule.indexer
  • sales_channel.indexer: php bin/console dal:refresh:index --only=sales_channel.indexer
  • theme.indexer: php bin/console dal:refresh:index --only=theme.indexer
  • netzp.blogpost.indexer: php bin/console dal:refresh:index --only=netzp.blogpost.indexer

9. Synchrone vs asynchrone Indexierung

Synchron:
Bei der synchronen Verarbeitung wird der Befehl sofort ausgeführt, und der gesamte Prozess muss abgeschlossen sein, bevor das System mit anderen Aufgaben fortfahren kann. Im Fall von Shopware bedeutet dies, dass der Index direkt aufgebaut wird. Das kann je nach Datenmenge variieren und zusätzliche Ressourcen wie CPU und RAM beanspruchen. Der Vorteil dieser Methode ist, dass du sofort die Ergebnisse siehst, was bei kritischen Aktualisierungen wichtig sein kann. Der Nachteil ist, dass es zu Wartezeiten kommen kann, wenn die Datenmenge groß ist oder die Serverressourcen begrenzt sind.

Asynchron:
Im Gegensatz dazu ermöglicht die asynchrone Verarbeitung dem System, den Befehl in eine Warteschlange zu stellen und andere Aufgaben parallel zu bearbeiten. Wenn du den Parameter –use-queue verwendest, wird der Indexaufbau nicht sofort durchgeführt, sondern in die Message Queue verschoben. Diese Methode entlastet das System und sorgt dafür, dass die Anwendung reaktionsschnell bleibt, während die Indizes im Hintergrund aktualisiert werden. Asynchrone Prozesse sind besonders nützlich, wenn große Datenmengen verarbeitet werden müssen, da sie die Belastung des Systems reduzieren und gleichzeitig die Benutzerfreundlichkeit aufrechterhalten.

Einfachstes Beispiel:

php bin/console dal:refresh:index --use-queue

Cronjobs:
Zusätzlich zu diesen Methoden können Cronjobs verwendet werden, um regelmäßige Aufgaben automatisiert auszuführen, wie beispielsweise die regelmäßige Aktualisierung der Indizes in Shopware. Diese Jobs können so konfiguriert werden, dass sie zu festgelegten Zeiten oder in bestimmten Intervallen laufen, was bedeutet, dass die Indizes ohne manuelles Eingreifen regelmäßig auf dem neuesten Stand gehalten werden. Dies trägt zur Stabilität und Effizienz des Systems bei und ermöglicht es den Betreibern, sich auf andere wichtige Aspekte des Geschäfts zu konzentrieren.

10. Hilfe ausgeben lassen

Manchmal steht man auf dem Schlauch und braucht etwas Hilfe. Die bekommt man mit diesem Befehl hier:

php bin/console dal:refresh:index --help

Hier ist die HTML-Tabelle mit den verfügbaren Optionen:

Shopware 6 Indizes aktualisieren - 60 - Hilfe

Shopware 6 Indizes aktualisieren – 60 – Hilfe

Und das hier sind die übersetzen Erläuterungen:

Option Beschreibung
--use-queue Ignoriert den Cache und erzwingt die Generierung.
--skip=SKIP Kommagetrennte Liste der Indexer-Namen, die übersprungen werden sollen.
--only=ONLY Kommagetrennte Liste der Indexer-Namen, die generiert werden sollen.
-h, --help Zeigt Hilfe für den angegebenen Befehl an. Wenn kein Befehl angegeben ist, wird die Hilfe für die Befehlsliste angezeigt.
-q, --quiet Gibt keine Nachrichten aus.
-V, --version Zeigt die Version dieser Anwendung an.
--ansi|--no-ansi Erzwingt (oder deaktiviert mit --no-ansi) die ANSI-Ausgabe.
-n, --no-interaction Stellt keine interaktiven Fragen.
-e, --env=ENV Der Name der Umgebung. [Standard: „dev“].
--no-debug Schaltet den Debug-Modus aus.
--profile Aktiviert das Profiling (erfordert Debug).
-v|vv|vvv, --verbose Erhöht die Ausführlichkeit der Nachrichten: 1 für normale Ausgabe, 2 für detailliertere Ausgabe und 3 für Debug.

11. Geheimwissen & mögliche Fehler

a) passe die Shopware.yaml an und setze die batch size auf 10

shopware:
auto_update:
enabled: false
admin_worker:
enable_admin_worker: false
dal:
batch_size: 10

b) memory_limit Fehler
Error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 1503232 bytes)
Lösung: Memory Limit z.B. so erhöhen
php -d memory_limit=512M bin/console dal:refresh:index

Bzw. auf einem anderen Weg das memory_limit erhähen (lassen)

12. Weiterführende Links und Quellen

Shopware Plugin – Blog Premium für SW6
https://store.shopware.com/de/netzp55675230632/blog-premium-fuer-sw-6.html
https://plugins.netzperfekt.de/plugin/NetzpBlog6

Shopware Docs – Message Queues
https://docs.shopware.com/de/shopware-6-de/tutorials-und-faq/message-queue-und-scheduled-tasks#admin-worker-deaktivieren-und-cli-worker-einrichten

Shopware Docs – SEO Einstellungen
https://docs.shopware.com/de/shopware-6-de/einstellungen/seo

Shopware Docs – Caches and Indexes:
https://docs.shopware.com/en/shopware-6-en/configuration/caches-indexes

github – NEXT-15739 – Added skip option to dal refresh index command
https://github.com/shopware/shopware/commit/bf3b5f5368d68f4fe67b2fb85d7ff3e71562721d

Blog Beitrag [winkelwagen] – Shopware 6: How to index
https://winkelwagen.de/2023/12/19/shopware-6-how-to-index/

Shopware Forum – Performance Optimierung Indexierung
https://forum.shopware.com/t/performance-optimierung-indexierung/72250/22

Blog Beitrag [The Cake Shop] – Shopware 6 | +10.000 Produkte, nicht mit Shopware < 6.4 https://the-cake-shop.de/shopware-6-10-000-produkte-nicht-mit-shopware-6-4/