Die Advanced Search steht Dir ab dem Plan Shopware Evolve als Erweiterung zur Verfügung.
Die Advanced Search bietet Dir einfache Konfigurationsmöglichkeiten und aufgrund der Elasticsearch-Basis hohe Performance.
Als separate Erweiterung kann Advanced Search bis Shopware 6.4.20.2 eingesetzt werden, in Version 6.5 ist das Plugin nicht mehr installierbar. Der Nachfolger Advanced Search 2.0 steht ab Shopware 6.5.7.0 zur Verfügung und benötigt als Suchengine OpenSearch. Die Funktionalität wird durch das installierte und aktivierte Commercial Plugin im Admin automatisch verfügbar. Mehr zum Nachfolger dieser Erweiterung findest Du hier.
Da die Advanced Search auf Elasticsearch basiert, ist eine Elasticsearch-Instanz Grundvoraussetzung für den Betrieb. Wie Du Elasticsearch in Shopware 6 integrierst, erfährst Du hier.
Als Bestandteil des Shopware Evolve Plans steht Dir die Advanced Search als Erweiterung zur Verfügung.
Du kannst die Erweiterung unter Erweiterung > Meine Erweiterungen herunterladen und installieren.
Wenn Du Dich im Reiter Shopware Account angemeldet hast, wird die Erweiterung im Reiter Allgemein aufgelistet und kann über den "..."-Button installiert werden.
Nachdem die Erweiterung installiert wurde, kannst Du diese über den Schalter links neben der Erweiterung aktivieren.
Weitere Informationen zur Verwaltung von Erweiterungen findest Du hier.
Solltest Du bei der Installation der Erweiterung die Meldung
"Could not install plugin, got 1 failure(s). Required plugin/package "shopware/platform >=v6.0
erhalten, ist es erforderlich, eine Anpassung der composer.json der Erweiterung vorzunehmen.
Die Erweiterung findest Du im Shopware-Verzeichnis unter /custom/plugins/SwagEnterpriseSearchPlatform.
In der composer.json passt Du diesen Bereich an:
"require": {
"shopware/platform": ">=6.1.0 < 6.3.0"
},
Dort entfernst Du den Eintrag
"shopware/platform": ">=6.1.0 < 6.3.0"
und fügst
"shopware/core": ">=6.1.0 < 6.3.0",
"shopware/storefront": ">=6.1.0 < 6.3.0",
"shopware/administration": ">=6.1.0 < 6.3.0",
"shopware/elasticsearch": ">=6.1.0 < 6.3.0"
ein.
Nachdem Du die Änderungen gespeichert hast, kannst Du die Erweiterung im Admin unter Erweiterungen > Meine Erweiterungen installieren.
Die Konfiguration der Advanced Search findest Du unter Einstellungen > Erweiterungen > Shopware Advanced Search.
Im Tab Übersicht kannst Du die grundlegende Konfiguration der Suche vornehmen.
Im Bereich Allgemeine Einstellungen wird über Welche Informationen werden indexiert und priorisiert (1) ein Modal aufgerufen, in dem Du die für die Suche zu berücksichtigenden Datensätze festlegst.
Im Abschnitt Trefferanzahl definierst Du die Anzahl der angezeigten Elemente für die Vorschausuche (2) und die Ergebnisseite (3).
Durchsuchbare Informationen
Um die zu durchsuchenden Daten festzulegen, wähle zunächst aus, für welche Entity (1) Du die Einstellung vornehmen möchtest. In der Advanced Search können Produkte, Kategorien und Hersteller durchsucht werden.
Anschließend wird Dir unterhalb eine Liste mit allen für die gewählte Entity verfügbaren Datensätzen aufgelistet. Dort kannst Du für jeden Datensatz festlegen, ob dieser nicht durchsucht (2), durchsucht (3) oder priorisiert (4) werden soll.
Priorisiert bedeutet, dass Treffer bei der Suche für den Inhalt dieses Datensatzes eine doppelt so hohe Gewichtung erhalten.
Bei Datensätzen, die auf Datenbankebene als Text (z.B. varchar) definiert sind, kannst Du zusätzlich festlegen, ob hierbei auch Teiltreffer (5) einbezogen werden sollen und ob auch Zusammengesetzte Wörter (6) berücksichtigt werden.
Teiltreffer sind z.B. kleinere Wortteile eines längeren Begriffs (Testprodukt).
Bei zusammengesetzten Wörtern werden mehrere Wörter auch ohne Eingabe eines Leerzeichens kombiniert (Test Produkt findet auch Testprodukt).
Nachdem Du Initial die Einstellungen der Indexierung vorgenommen hast, ist es erforderlich, eine Indexierung über die Serverkonsole durchzuführen. Wie Du die Indexierung durchführst, erfährst Du im Abschnitt Indexierung.
Beachte bitte, dass die Konfiguration der zu indexierenden Daten aktuell nicht Verkaufskanalspezifisch möglich ist.
Folgend einmal die wichtigsten Variablen erklärt:
Feld | Beschreibung |
fullText | Standard Shopware Feld mit niedriger Priorität |
fullTextBoosted | Standard Shopware Feld mit höherer Priorität |
price.gross | Bruttopreis |
price.net | Nettopreis |
productNumber | Produktnummer |
stock | Lagerbestand |
restockTime | Wiederauffüllzeit in Tagen |
autoIncrement | Staffelung |
availableStock | Verfügbarer Lagerbestand |
variation | Porduktvariante |
displayGroup | String Feld mit IDs, um den Content anzuzeigen |
manufacturerNumber | Herstellernummer |
ean | EAN-Nummer |
purchaseSteps | Menge Schritte des Kaufs |
maxPurchase | Maximalabnahme |
minPurchase | Minimalabnahme |
purchaseUnit | Verkaufseinheit |
referenceUnit | Grundeinheit |
purchasePrices.gross | Einkaufspreis Brutto |
purchasePrices.net | Einkaufspreis Netto |
weight | Gewicht |
width | Breite |
height | Höhe |
length | Länge |
ratingAverage | Bewertung im Durchschnitt |
categoryTree | Kategoriebaum |
propertyIds | Eigenschaften IDs |
optionIds | IDs der Optionen |
tagIds | Tag IDs |
categoryIds | Kategorie IDs |
childCount | Anzahl der Varianten |
sales | Verkäufe |
metaDescription | Meta Produktbeschreibung |
name | Produktname |
keywords | Such-Schlagwörter |
description | Produktbeschreibung |
metaTitle | Meta Titel |
packUnit | Verpackungseinheit |
packUnitPlural | Verpackungseinheit-Mehrzahl |
customSearchKeywords | Im Admin definierte Suchschlägwörter |
deliveryTime.unit | Lieferzeit Einheit |
deliveryTime.max | Maximale Lieferzeit |
deliveryTime.min | Minimale Lieferzeit |
deliveryTime.name | Name der Lieferzeit |
tax.position | Position der Steuer |
tax.name | Name der Steuer |
tax.taxRate | Prozentrate der Steuer |
manufacturer.description | Herstellerbeschreibung |
manufacturer.name | Herstellername |
manufacturer.link | Link des Herstellers |
unit.name | Name der Maßeinheit |
unit.shortCode | Maßeinheit Kurzform |
cover.position | Position des Vorschaubildes in der Medien Übersicht des Artikels. |
cmsPage.entity | Element |
cmsPage.type | Layout Typ der hinterlegten Erlebniswelt |
cmsPage.name | Name der hinterlegten Erlebniswelt |
canonicalProduct.customSearchKeywords | SEO-Daten des jeweiligen Werts |
canonicalProduct.packUnitPlural | SEO-Daten des jeweiligen Werts |
canonicalProduct.packUnit | SEO-Daten des jeweiligen Werts |
canonicalProduct.metaTitle | SEO-Daten des jeweiligen Werts |
canonicalProduct.description | SEO-Daten des jeweiligen Werts |
canonicalProduct.keywords | SEO-Daten des jeweiligen Werts |
canonicalProduct.name | SEO-Daten des jeweiligen Werts |
canonicalProduct.metaDescription | SEO-Daten des jeweiligen Werts |
canonicalProduct.sales | SEO-Daten des jeweiligen Werts |
canonicalProduct.childCount | SEO-Daten des jeweiligen Werts |
canonicalProduct.categoryIds | SEO-Daten des jeweiligen Werts |
canonicalProduct.tagIds | SEO-Daten des jeweiligen Werts |
canonicalProduct.streamIds | SEO-Daten des jeweiligen Werts |
canonicalProduct.optionIds | SEO-Daten des jeweiligen Werts |
canonicalProduct.propertyIds | SEO-Daten des jeweiligen Werts |
canonicalProduct.categoryTree | SEO-Daten des jeweiligen Werts |
canonicalProduct.ratingAverage | SEO-Daten des jeweiligen Werts |
canonicalProduct.length | SEO-Daten des jeweiligen Werts |
canonicalProduct.height | SEO-Daten des jeweiligen Werts |
canonicalProduct.width | SEO-Daten des jeweiligen Werts |
canonicalProduct.weight | SEO-Daten des jeweiligen Werts |
canonicalProduct.purchasePrices.gross | SEO-Daten des jeweiligen Werts |
canonicalProduct.purchasePrices.net | SEO-Daten des jeweiligen Werts |
canonicalProduct.referenceUnit | SEO-Daten des jeweiligen Werts |
canonicalProduct.purchaseUnit | SEO-Daten des jeweiligen Werts |
canonicalProduct.minPurchase | SEO-Daten des jeweiligen Werts |
canonicalProduct.maxPurchase | SEO-Daten des jeweiligen Werts |
canonicalProduct.purchaseSteps | SEO-Daten des jeweiligen Werts |
canonicalProduct.ean | SEO-Daten des jeweiligen Werts |
canonicalProduct.manufacturerNumber | SEO-Daten des jeweiligen Werts |
canonicalProduct.displayGroup | SEO-Daten des jeweiligen Werts |
canonicalProduct.variation | SEO-Daten des jeweiligen Werts |
canonicalProduct.availableStock | SEO-Daten des jeweiligen Werts |
canonicalProduct.autoIncrement | SEO-Daten des jeweiligen Werts |
canonicalProduct.restockTime | SEO-Daten des jeweiligen Werts |
canonicalProduct.stock | SEO-Daten des jeweiligen Werts |
canonicalProduct.productNumber | SEO-Daten des jeweiligen Werts |
canonicalProduct.price.gross | SEO-Daten des jeweiligen Werts |
canonicalProduct.price.net | SEO-Daten des jeweiligen Werts |
prices.quantityEnd | Maximale Menge des Produktes, die im Warenkorb liegen muss, damit dieser Preis gilt. |
prices.quantityStart | Minimale Menge des Produktes, die im Warenkorb liegen muss, damit dieser Preis gilt. |
crossSellings.limit | Maximale Produktanzahl |
crossSellings.type | Cross Selling Typ |
crossSellings.sortDirection | Cross Selling Sortierung Richtung |
crossSellings.sortBy | Cross Selling Sortierung |
crossSellings.position | Cross Selling Position |
crossSellings.name | Cross Selling Name |
visibilities.visibility | Sichtbarkeit |
searchKeywords.ranking | Such-Schlagwort |
searchKeywords.keyword | Such-Ranking |
productReviews.comment | Produktbewertung Kommentar |
productReviews.points | Produktbewertung Bewertung |
productReviews.content | Produktbewertung Inhalt |
productReviews.title | Produktbewertung Titel |
productReviews.externalEmail | Mail des Endkunden |
productReviews.externalUser | Vorname des Endkunden |
seoUrls.url | SEO-URL |
orderLineItems.type | Typ der bestellten Position |
orderLineItems.totalPrice | Gesamtpreis der bestellten Position |
orderLineItems.unitPrice | Stückpreis der bestellten Position |
orderLineItems.quantity | Stückzahl der bestellten Position |
orderLineItems.price | Preisfeld der bestellten Position |
orderLineItems.discount | Rabatt der bestellten Position |
orderLineItems.percentage | Prozentangabe des Discounts |
orderLineItems.label | Name der bestellten Position |
orderLineItems.referencedId | Produkt ID der bestellten Position |
orderLineItems.identifier | Produkt ID der bestellten Position |
options.colorHexCode | Farbcode der in der Eigenschaft hinterlegten Farbe. |
options.name | Name der Variante |
properties.colorHexCode | Color-Hex-Code der Eigenschaft |
properties.position | Position der Eigenschaft |
properties.name | Name der Eigenschaft |
categories.keywords | Kategorie Schlagwörter |
categories.metaDescription | Kategorie Meta Beschreibung |
categories.metaTitle | Kategorie Meta Titel |
categories.description | Kategorie Beschreibung |
categories.externalLink | Kategorie Externer Link |
categories.linkType | Kategorie Link-Typ |
categories.name | Kategoriename |
categories.productAssignmentType | Produktzuweisung Typ |
categories.type | Kategorietyp |
categories.childCount | Anzahl der Unterkategorien |
categories.path | Kategoriepfad |
categories.level | Kategorie-Ebene |
categories.autoIncrement | Einmalige Dezimalzahl |
Die Vorschau ermöglicht Dir, die Sucheinstellungen direkt im Admin zu testen.
Um die Vorschau zu nutzen, wähle zunächst den Verkaufskanal (1), für den Du die Suche testen möchtest.
Über die Auswahl (2) neben dem Suchfeld (3) kannst Du festlegen, ob Du die Suche für Produkte, Kategorien oder Hersteller testen möchtest.
Nachdem Du einen Suchbegriff eingegeben hast, wird Dir unterhalb eine Liste mit den Suchergebnissen angezeigt.
In dieser Liste wird für die Suchergebnisse zusätzlich ein Ranking eingeblendet, über das Du die Relevanz zum Suchbegriff erkennen kannst. Dieses Ranking wird anhand der Elasticsearch-Suchalgorithmen errechnet. Einige weitere Informationen zum Ranking eines Suchergebnisses erhältst Du, wenn Du mit der Maus über das Ranking des Suchergebnisses hooverst.
Neben der Priorisierung von einzelnen zu durchsuchenden Datensätzen, besteht die Möglichkeit, zusätzliche Boostings anzulegen. Ein Boosting bietet Dir gezielte Konfigurationsoptionen, um z.B. bestimmte Produkte in den Suchergebnissen weiter oben anzuzeigen.
Produkt-Boosting
Für das Boosting von Produkten werden vorhandene dynamische Produktgruppen verwendet. Es werden die Produkte höher gewertet, die in der Produktgruppe vorhanden sind und auf die die Suchanfrage generell zutrifft.
Solltest Du bisher noch keine entsprechende dynamische Produktgruppe erstellt haben, empfehlen wir Dir, dies als ersten Schritt durchzuführen.
Für die Konfiguration eines Produkt-Boostings vergib zunächst einen Namen (1) und die gewünschte Boosting-Relevanz im Feld Boost (2). Diese Boosting Relevanz wird den Produkten zur ohnehin schon erhaltenen Relevanz hinzuaddiert. Um das Boosting zu aktivieren, klicke auf den Schalter Aktiv (3). Optional ist es möglich, das Boosting nur in einem bestimmten Zeitraum zu verwenden. Hierzu stelle den Zeitraum in den Feldern Aktiv von (4) und Aktiv bis (5) ein. Als Stream Typ (5) wähle Product Stream aus, hierdurch wird das Feld TypeId (7) eingeblendet. Im Auswahlfeld TypId kannst Du dann aus den vorhandenen dynamischen Produktgruppen wählen.
Kategorie- und Hersteller-Boosting
Für das Boosting von Kategorien und Herstellern kannst Du direkt im Modal des Boostings eigene Regeln definieren.
Bei der Konfiguration eines Kategorie oder Hersteller-Boostings, vergib zunächst einen Namen (1) und die gewünschte Boosting-Relevanz im Feld Boost (2). Um dieses Boosting zu aktivieren, klicke auf den Schalter Aktiv (3).
Über die Felder Aktiv von (4) und Aktiv bis (5) kannst Du das Boosting zeitlich begrenzen, ohne dieses manuell zu einer bestimmten Zeit ein- bzw. ausschalten zu müssen.
Als Stream Typ (6) wähle Entity Stream aus, im nun erscheinenden Feld Typ (7) Kategorie oder Hersteller.
Anschließend wird die Möglichkeit zum Erstellen von Regeln (8) eingeblendet. Diese Regel-Konfiguration basiert auf dem Rule-Builder. Hiermit kannst Du individuelle Bedingungen erstellen, anhand derer das Boosting angewendet werden soll.
Mit Aktionen ist es möglich, nach bestimmten Begriffen/Keywords im Namen zu suchen. Der Kunde wird automatisch zu einem definierten Bereich (Url, Produkt oder Kategorie) weitergeleitet.
Neue Aktion
Name (1): Hinterlege einen Namen für die Aktion.
Suchbegriffe (2): Hier kannst Du die Suchbegriffe bzw. Keywords eintragen.
Aktiv (3): Definiere, in welchem Zeitraum die Aktion gültig ist.
Typ (4): Hier kannst Du wählen, ob der Kunde zu einer definierten URL, einem Produkt oder einer Kategorie weitergeleitet werden soll, wenn der Suchbegriff gesucht wird.
URL / Produkt / Kategorie (5): Wie in (4) erwähnt kannst Du, je nach dem welchen Typ Du wählst, eine URL, ein Produkt oder eine Kategorie hinterlegen.
In der Suche bezieht sich die Verwendung des Begriffs "Synonyme" normalerweise auf die Funktion, bei der Suchmaschinen oder Suchwerkzeuge alternative Begriffe oder Ausdrücke anzeigen, die eine ähnliche Bedeutung wie der eingegebene Suchbegriff haben. Diese Funktion hilft Benutzern, ihre Suchergebnisse zu verfeinern, indem sie ihnen ähnliche Begriffe oder Variationen anbietet, die relevant sein könnten.
Wenn beispielsweise jemand nach "Auto" sucht, könnte eine Suchmaschine möglicherweise Synonyme wie "Fahrzeug", "Kraftwagen" oder "PKW" anzeigen, um dem Benutzer weitere Optionen zu bieten. Dies erleichtert die Suche nach relevanten Informationen und erweitert den Umfang der Suchergebnisse.
Links (1): Trage hier den Synonym-Begriff für Gleichwertige oder Definierende Synonyme ein.
Sprache (2): Hinterlege hier die Sprache für das Synonym.
Rechts (3): Trage hier einen Synonym-Begriff ein, der für Gleichwertige Synonyme gilt.
Nachdem Du das erste Mal die Konfiguration der Advanced Search vorgenommen hast, ist es erforderlich, den Index aufzubauen. Dies ist in 3 Schritten in der Serverkonsole möglich.
Zunächst werden die Indizes erstellt
php bin/console es:index
Nachdem dieser Schritt vollständig durchgelaufen ist, erfolgt im zweiten Schritt die Verarbeitung über die Message Queue. In den meisten Systemen erfolgt dies automatisch über den Admin bzw. CLI Worker. Schaue Dir gerne noch mal unseren Doku-Artikel zum Thema Message Queue an, falls Du Dir unsicher bist, ob die Message Queue bei Dir automatisch abgearbeitet wird.
Abschließend können noch die Aliasse für die Indizes angelegt werden. Hierzu sollte aber gesagt sein, dass dies in der Regel automatisch erfolgt. In manchen Systemen kann dies jedoch erforderlich sein. Sollten die Indizes bei Dir also erfolgreich erstellt worden sein, Du aber weiterhin keine Produkte in Deiner Storefront siehst, kannst Du noch den folgenden Befehl ausführen.
php bin/console es:create:alias
Die Indexierung funktioniert genau wie bei der technisch zu Grunde liegenden Elasticsearch-Integration. Daher findest Du weitere Informationen in der Dokumentation zu Elasticsearch.
Damit nun final auch neue Produkte bzw. Änderungen an bestehenden Produkten in die Indizes übernommen werden, ist es erforderlich SHOPWARE_ES_INDEXING_ENABLED=1 in der .env Datei in Deinem Shopverzeichnis auf 1 (aktiv) zu setzen. Bei Änderungen der Konfiguration oder der Sucheinstellungen ist ein Neuaufbau des Suchindexes notwendig.