Suchindex wird aufgebaut und wieder gelöscht

Hallo zusammen,

Wir sind mit einer fast neuen Shopware Installation unterwegs. Die einzigen Dritt-Plugins sind im Moment ein Theme und ein Profiler Plugin. Die einzigen Inhalte im Shop sind unser Kategorienbaum (ca. 15’000) und ein Testartikel (welcher auch Keywords hat).

Leider funktioniert der Suchindex-Aufbau nicht. Wie man in der Datenbank nachvollziehen kann, fügt Shopware in die s_search_index Tabelle zuerst ca. 80’000 und in die s_search_keywords Tabelle etwa 1’100 Einträge ein (dauert etwa 5-10 Sekunden), nur um dann sofort wieder alle Einträge aus beiden Tabellen zu löschen. Wenn ich also im Backend unter Performance > Einstellungen > Suche auf „Such-Index neu aufbauen“ klicke werden zuerst haufenweise sinnvolle Einträge eingefügt, alle Einträge gelöscht und danach meldet Shopware: „Erfolgreich: Operation Beendet“. Das gleiche Spiel mit dem Befehl in der Kommandozeile. Interessanterweise fehlen den s_search_keywords Einträgen auch die Soundex Informationen bevor sie wieder gelöscht werden. Manuelle Einträge in die Tabelle werden nicht gelöscht solange der Indexierungsprozess nicht läuft.

So funktioniert leider die Suche in unserem Shop nicht und mit der Einstellung dass der Index Live generiert wird führte es auch noch dazu, dass die Seite etwa 10 Sekunden lang hatte um zu laden (wenigstens ist das Problem behoben). Weiss hier jemand was los ist? Warum fügt Shopware haufenweise sinnvolle Einträge in die Tabelle um sie dann wieder zu löschen? Der Grossteil der Konfiguration ist auch noch im Auslieferungszustand.

Beste Grüsse,

Philipp

Gibt es irgendwelche Meldung im Log von Shopware oder im Error-Log des Servers ?

Wenn ich richtig gelesen habe habt Ihr einen Kategoriebaum mit 15.000 (fünfzehntausend) Einträgen ?

Wenn ja, habt Ihr die manuell angelegt :wink: oder importiert ? Ist die Kategorie „Deutsch“ überhaupt noch vorhanden ?

16’617 um genau zu sein (wir führen Zubehör für Mobiltelefone und jedes Gerät kriegt ein Set Unterkategorien). Die Kategorien haben wir über die Datenbank importiert. Deutsch und Root sollten korrekt drin sein. Im Backend/Frontend funktioniert alles und wird auch korrekt angezeigt. Die Performance ist allgemein auch gut.

Keine Fehler in den Logs von Shopware oder im Server. Wir haben eine Demo von Tideways laufen (so ein sauteures Profiling Tool), so weit ich es erkennen kann werden die Einträge mit einer „DELETE“ Abfrage wieder gelöscht. Und zwar in der Cleanup Index Routine nach der Build Index Routine.

Update: Dank des Profiling Tools habe ich gleich die richtige PHP Datei gefunden (SearchIndexer.php) und bin dem Problem auf die Schliche gekommmen:

Die Cleanup Routine löscht diejenigen Einträge welche aus der folgenden SQL Query stammen

SELECT STRAIGHT_JOIN
	   keywordID, fieldID, sk.keyword
FROM `s_search_index` si

INNER JOIN s_search_keywords sk
ON si.keywordID=sk.id

$sql_join

GROUP BY keywordID, fieldID
HAVING COUNT(*) > (SELECT COUNT(*)*0.9 FROM `s_articles`)

Wir hatten nur einen einzelnen Artikel, was bedeutet dass die Having-Klausel logischerweise für jeden Eintrag zutraf. Die Logik dahinter ist mir aber immer noch ein wenig schleierhaft. Jetzt mit 2 Artikeln ist der Such-Index nicht mehr leer.

Mir ist das logisch: Wozu Suchindex, wenn keine Artikel drin ?

Hier gibts auch noch ein paar infos: Shopware 5 - Tutorials & FAQs - Shopware Suche Debuggen