Ich habe mir jetzt mal ein bisschen Zeit genommen um das Problem mit den „zu viel bzw. falsch gefundenen Produkten“ genauer im Code (Shopware 6.5.3.3) zu analysieren.
Dazu habe ich mir die Datei \vendor\shopware\core\Content\Product\SearchKeyword\ProductSearchBuilder.php angeschaut. Mithilfe von Debug-Ausgaben konnte ich folgendes feststellen:
// Test-Ausgabe: meine gesuchte Artikelnummer "000360" -> korrekt!
dump($term);
// Zeile 42
$pattern = $this->interpreter->interpret($term, $context->getContext());
// Test-Ausgabe: Objekt Shopware\Core\Framework\DataAbstractionLayer\Search\Term\SearchPattern
// Die Objekt-Eigenschaft "tokenTerms" enthält ein verschachteltes Arrray, welches als Elemente meine gesuchte Artikelnummer "000360", sowie die Artikelnummern der falsch gefundenen Produkte enthält.
// -> der Fehler passiert also in Zeile 42
dump($pattern);
Also habe ich mir die Datei \vendor\shopware\core\Content\Product\SearchKeyword\ProductSearchTermInterpreter.php angeschaut und folgendes per Debug-Ausgabe festgestellt:
// Test-Ausgabe: Hier wird aus meiner gesuchten Artikelnummer offenbar ein Array erstellt mit verschiedenen evtl. möglichen Schreibweisen der Artikelnummer:
/*
array:1 [▼
"000360" => array:2 [▼
"normal" => array:12 [▼
0 => "00360%"
1 => "0_0360%"
2 => "0__0360%"
3 => "0360%"
4 => "0_360%"
5 => "0__360%"
6 => "00060%"
7 => "000_60%"
8 => "000__60%"
9 => "0000%"
10 => "000_0%"
11 => "000__0%"
]
"reversed" => array:12 [▼
0 => "03000%"
1 => "0_3000%"
2 => "0__3000%"
3 => "0000%"
4 => "0_000%"
5 => "0__000%"
6 => "06300%"
7 => "063_00%"
8 => "063__00%"
9 => "0630%"
10 => "063_0%"
11 => "063__0%"
]
]
]
*/
dump($tokenSlops);
// Zeile 50 > in dieser Funktion wird eine Abfrage an die Datenbank-Tabelle product_keyword_dictionary abgesendet
// (vermutlich um alle Keywords zu finden, die auf die oben gelisteten Schreibweisen des Such-Strings passen)
// Da aufgrund des ähnlichen Aufbaus der Artikelnummern mehrere Artikelnummern auf die verschiedenen Schreibweisen zutreffen,
// findet Shopware die falschen Artikelnummern als Keyword-Treffer
$tokenKeywords = $this->fetchKeywords($context, $tokenSlops);
// Test-Ausgabe: In dem Array sind sowohl meine gesuchte Artikelnummer als auch die Artikelnummern der falschen gefundenen Produkt enthalten
// Weil diese falschen Keywords als Basis für die Suche genutzt werden, werden die falschen Produkte gefunden
dump($tokenKeywords);
Wenn ich die Sache richtig verstanden habe ist das Hauptproblem m.E. also, dass die Suche in Shopware unterschiedliche Schreibweisen für das Suchwort ausprobiert. Das mag für die Suche nach einer Produkt-Bezeichnung vorteilhaft sein um Tippfehler abzufangen, für eine Suche nach einer Nummern (egal ob EAN oder Artikelnummer) ist das aber problematisch. Hier muss Shopware unbedingt nachbessern, was aber vermutlich ein etwas größerer Aufwand wird. Hilfreich und leichter umzusetzen wäre evtl. eine Option, mit der man die Suche nach „anderen Schreibweisen“ (also den Code $tokenSlops = $this->slop($tokens); ) deaktivieren kann. Alternativ könnte Shopware das auch tun sobald der Suchbegriff nur aus Ziffern besteht oder mind. 2 Ziffern enthält da der Schaden durch die Funktion dann einfach größer ist als der Nutzen. DAS wäre evtl. auch mit einer kleineren Anpassung möglich.
Es muss also darauf gehofft werden, dass Shopware dieser Problematik eine etwas höhere Priorität einräumt und eine Lösung dafür umsetzt. Immerhin ist die Suche - gerade für größere Shops - extrem wichtig!
Im Beitrag Suche nach Artikelnummern: Nicht nach Bestandteile? - #15 von FloC3 wurde die Code-Stelle für die „fehlertolerante Suche“ übrigens auch gefunden und von dem User angepasst. Da wir ungern (mit jedem Update) den Core-Code anpassen oder extra ein Plugin erstellen wollen, haben wir uns zur Abmilderung des Problems bei der Suche nach einer Artikelnummer nun mit dem Plugin Artikeldetailseite bei eindeutigem Nummer-Match in Suche | Shopware Store beholfen. Damit verbessert sich zumindest die Nutzerfreundlichkeit, wenn der Nutzer nach einer korrekten vollständigen Artikelnummer sucht.
Ich würde mal sagen, die ungenaue Suche ist derzeit eines der grössten Leidthemen dieser Software. Alleine die Aufrufe zu diesem Thema spricht Bände. Höchste Zeit, dass sich die Entwickler mal dahinter setzen!
Ich habe das Problem auch auf Shopware v6.4.17.2 - das ist eine Katastrophe.
Den ganzen Thread habe ich mir durchgelesen und versucht, einzelne Lösungsvorschläge zu testen.
Keines davon hat irgendwelche Lösungen gebracht. Daher meine Frage, ob jemand mit irgendetwas eine Lösung herausgefunden hat, die auch funktioniert (oder eine Verbesserung bringt), bis Shopware dafür eine Lösung präsentiert.
Die einzige „Lösung“ welche ich für mich gefunden habe, ist das Plugin „doofinder“ welches bis zu 1000 Abfragen pro Monat kostenlos ist. Die Suche (vor allem mit dem Layer) ist hervorragend. Leider erreiche ich bereits Mitte Monat schon die 1000 Abfragen, womit wieder die normale Suche greift. Für EUR 35 pro Monat könnte ich bis zu 10’000 Abfragen pro Monat upgraden, was jedoch mein derzeitiges Budget sprengen würde. Deshalb gibts halt bis auf weiteres bei mir eine halbe Lösung.
Ich habe als Hilfe das Plugin „Suche nach Produktnummer“ installiert.
Weil ist doch ein bisschen doof wenn man einen Kunden am Telefon berät und ihm einen Artikel empfiehlt und dann Namen angibt, aber der Kunde sich dann aus 20 Suchergebnissen den richtigen aussuchen muss…
Update: Es scheint so, dass sich bei den letzten Shopware-Updates etwas bei der Suche getan hat:
Hierdurch wird im Adminbereich nun scheinbar der richtige Zeitpunkt für den letzten erstellten Suchindex genannt (auch wenn bei uns die Formatierung dessen fehlerhaft ist - das richtige Datum wird nur beim Überfahren der hinteren Uhrzeit angezeigt)
Hier wurde offenbar die Empfehlung umgesetzt, die Toleranz-Suche bei einem numerischen Such-String zu unterbinden
Wir haben die aktualisierte Produkt-Suche in der Storefront getestet und dabei erfreulicherweise festgestellt, dass die Produkt-Suche im Shop nun durch die Shopware-Updates deutlich besser funktioniert. Bei der Suche nach einer numerischen Artikelnummer oder EAN wird nun das korrekte Produkt gefunden - und zwar NUR das Produkt und keine anderen falschen Produkte mehr. Sicherlich ist die Suche noch nicht perfekt, aber es geht voran und für unsere Zwecke reicht es erstmal!
Wer meckert muss auch loben - daher von unserer Seite: Vielen Dank für die Verbesserung der Suche
Die Suche war bei uns am Ende auch noch ziemlich Banane. Mit Elasticsearch als Suchbackend läuft alles jedoch tadellos. Traurig nur, dass es nicht mit der Basis-Suche so einfach geht.
Haben wir auch, dagegen kannst Shopware Suche in die Tonne werfen.
Auch Varianten werden gefunden etc.
Du kannst die Suchabfragen minimieren. Achte mal darauf, wie oft du die Produkte bei doofinder einlesen tust? Täglich? Kann man auch ändern, musst eigentlich nur, falls du neues Produkt listest.
Dieses API Zugriff wird auch in die 1000 gerechnet.
Also in einem der letzten Updates müssen die richtig was gedreht haben.
In der Version 6.5.8.7 funktioniert die Suche zumindst für uns wie man es erwarten kann.
Bei Eingabe der Artikelnummer spuckt sie nur den Artikel aus und bei der Abmessung auch nur die mit entsprechender richtigen Abmessung. Sonst wurden immer fast alle Artikel ausgegeben die auch nur Ansatzweise eine der Zahlen im Namen oder Artikelnummer hatten.