Suche nach Hersteller funktioniert nicht

Hallo zusammen,

in meinem frisch aufgesetzten Shop funktioniert leider die Suche nach Herstellernamen nicht. Rufe ich /herstellername/ auf, dann erscheint ein Listing mit allen Artikeln des Herstellers. Gebe ich den Herstellernamen in das Suchfeld ein, dann erhalte ich jedoch 0 Treffer. Den Suchindex habe ich bereits (mehrfach) neu aufgebaut. Neu hinzugefügte Artikel lassen sich über ihren Titel auch bereits finden, die Suche nach Herstellernamen führt jedoch ausnahmslos immer zu 0 Treffern. Auch die Installation der intelligenten Suche hat leider nichts verändert.

Hat jemand eine Idee, was hier falsch läuft?

Gibt es Fehler in den Shopware-Logs oder im Error-Log der Website?

Timme Hosting - schnelles nginx-Hosting

www.timmehosting.de

“Leider” nein.

Hello @SteineShop
Weisst du noch wie du das Problem lösen konntest?
Steht aktuell am gleichen Punkt mit der SW Version 5.7.3 und der SW Standard Suche.

Grundeinstellungen > Storefront > Suche
Reiter “Relevanz/Felder”
Prüfe ob es einen Eintrag für den Herstellernamen gibt, ggf. Relevanzwert erhöhen
Der Eintrag muss auf Feld “name” in Tabelle “s_articles_supplier” verweisen, siehe Screenshot:

LG Phil

Vielen Dank fürs Feedback.
Dies ist bereits „out of the box“ korrekt hinterlegt. Habe ein Shopware Ticket eröffnet, welches aktuell bearbeitet wird.

Poste gerne hier die Lösung rein.
LG Arya

Sorry beinahe vergessen zu antworten.
Es gibt hier ein Bugticket dazu: Shopware Issuetracker

Das Problem ist, dass die Anzahl der Artikel, die mit den Keywords des Herstellers verknüpft werden können (cnt_self) mit der Anzahl der Hersteller (cnt_s_articles_supplier * 0.9) verglichen wird. Sobald die Anzahl der matchenden Artikel die der Hersteller übersteigt, wird das entsprechende keyword ausgeschlossen. Die Änderung wurde mit dem PR SW-23891 umgesetzt, hier sollte verhindert werden, dass die Suche nach generischen Keywords zu viele Ergebnisse zurückliefert.

Der Support denkt die Umsetzung ist fehlerhaft und hat das Problem außerdem auch mit einer älteren Version (v5.6.7) nicht nachstellen können. Wir nutzen aktuell die Version 5.7.3.

Ein möglicher Patch welcher bei uns funktioniert:

diff --git a/engine/Shopware/Bundle/SearchBundleDBAL/SearchTerm/SearchIndexer.php b/engine/Shopware/Bundle/SearchBundleDBAL/SearchTerm/SearchIndexer.php
index 56f5a8ae2b..22b66a50ec 100644
--- a/engine/Shopware/Bundle/SearchBundleDBAL/SearchTerm/SearchIndexer.php
+++ b/engine/Shopware/Bundle/SearchBundleDBAL/SearchTerm/SearchIndexer.php
@@ -36,6 +36,11 @@ class SearchIndexer implements SearchIndexerInterface
      */
     public const INDEX_DELETE_THRESHOLD = 0.9;
 
+    /**
+     * List of keywords which should never be deleted from the search index
+     */
+    private const INDEX_ALLOWLIST = ['foobar', 'foobaragain'];
+
     /**
      * @var Connection
      */
@@ -322,6 +327,11 @@ class SearchIndexer implements SearchIndexerInterface
         );
 
         $collectToDelete = $this->connection->fetchAll($mappedSql);
+
+        $collectToDelete = array_filter($collectToDelete, static function (array $dataset): bool {
+            return array_search($dataset['keyword'], self::INDEX_ALLOWLIST) === false;
+        });
+
         foreach ($collectToDelete as $delete) {
             $sql = '
                 DELETE FROM s_search_index

Moin zusammen!

Da es leider bis heute nicht funktioniert, habe ich folgendes für uns gemacht:

Konkret scheint die „cleanupIndex“ Funktion (engine/Shopware/Bundle/SearchBundleDBAL/SearchTerm/SearchIndexer.php) zu rabiat „s_search_keywords“ zu löschen.

Als vorrübergehenden patch führt folgendes zum Erfolg:

        $qb
            ->select(['si.keywordID', 'si.fieldID', 'sk.keyword'])
            ->addSelect('(SELECT tableId FROM s_search_fields WHERE s_search_fields.id = si.fieldID) AS tableId')
            ->addSelect('COUNT(*) AS count_self')
            ->from('s_search_index', 'si')
            ->innerJoin('si', 's_search_keywords', 'sk', 'si.keywordID=sk.id')
            ->where('si.fieldID != 6')
            ->groupBy('si.keywordID')
            ->addGroupBy('si.fieldID')
            ->setParameter('threshold', static::INDEX_DELETE_THRESHOLD);

Geändert am Original-Code ist die Zeile:

->where('si.fieldID != 6')

Dies ist natürlich sehr unschön. Aber mir fehlt die Zeit es schön zu machen. Jemand eine Idee für eine schönere Lösung?
Ansonsten voted für eine Umsetzung:
Issuestracker

Gruß
Paul