Magefinder – die bessere Suche für Magento (Teil 2)

Um die Funktion von Magefinder näher zu bringen, werde ich 2 Bereiche behandeln:

  • Magento Modul (dieser Artikel)
  • Magefinder API

Die wesentliche Stärke von Magefinder ist die Vereinfachung des CloudSearch Systems und die Nutzung eines vollwertigen Suchdienstes mit wenig Verwaltungsaufwand.

Das Magento Modul

Wie bereits im ersten Teil bemerkt, war es mir ein großes Anliegen, nur möglichst wenig in das Kernsystem einzugreifen. Deswegen werden zwar alle notwendigen Daten in CloudSearch indiziert, aber nur die Produkt-Id mit dessen Textrelevanz an Magento zurückgegeben.

Alle weiteren Features der Datenaggregation und Filterungen sind in Magento sauber realisiert, weswegen ich es nicht für nötig hielt, diese Logik auch in Magefinder abzubilden. Weiters spart es auch Bandbreite in der Kommunikation mit Magefinder, was den Dienst auch schnell macht.

Der Kern des Modul ist eine eigene Search Engine. Ist eine solche konfiguriert und als Model aufrufbar, wird diese statt dem default ResourceModel “catalogsearch/fulltext_engine” verwendet.

Es gibt also im Magefinder Modul in der config.xml folgenden Eintrag:

Darüber wird die Kommunikation mit Magefinder gesteuert, wobei die Requests und deren Verarbeitung in einem eigenen Resource Model “magefinder/magefinder” gemanaged werden.

Zu dieser Engine kommen noch diverse Konfigurationen, die im Menü “System > Konfiguration > Katalog > Magefinder” verwaltet werden können. Hier kann das Modul generell aktiviert werden. Erst nach der Aktivierung wird Magefinder verwendet. Damit jeder Shop nur seine Produkte in Magefinder indexieren und suchen kann, werden alle Requests mit einem Api-Key und einem Hash versehen. Mit dem Status Button kann die Verfügbarkeit des Kontos überprüft werden.

Im 2. Teil der Konfiguration werden die Endpoints zu Magefinder definiert. Es wird zwischen Indexierung und Suchanfragen unterschieden, da Suchanfragen ganz andere Anforderungen an Verfügbarkeit, Latenz und Antwortzeiten haben als Indexierungsanfragen. Dabei werden für jeden Shop 2 eigene Subdomains erstellt, damit eine Verlegung eines Index auf einen anderen Magefinder Cluster für den Shopbetreiber keinen Einfluss hat.

Ein zentraler Bestandteil der Suche ist die richtige Verwaltung der Attribute. Hier war die Herausforderung die dynamische Verwaltung von Attributen in Magento auch in Magefinder abzubilden. Dazu gibt es eine Mapping-Tabelle, um Attribute einem Suchattribut zuzuordnen.

Die Standardattribute, wie Sku, Name, Beschreibung, Preis, etc. werden bereits bei der Installation des Modul verbunden, können aber jederzeit wieder geändert werden. Alle weiteren durchsuchbaren Attribute werden als Dropdown angeboten, um diese mit einem der beiden Feldtypen zu verbinden, oder aktiv auszuschließen. Die beiden Feldtypen unterscheiden sich wie folgt:

Textfeld
Damit sollten alle Attribute verknüpft werden, die einen Freitext enthalten. CloudSearch analysiert diese Texte und bildet anhand der Textoptionen einen Index mit Wörtern bzw. Wortstämmen. Es wird zB der Text “Das Auto verfügt über vier runde Reifen” in  folgende Worte zerlegt:
auto, verfugt, vier, 4, rund, reif
Dies wirkt etwas eigenartig, aber die selben Prozesse werden bei Suchanfragen auch angewandt und somit die besten Treffer erzielt. Stoppwörter werden aus dem Text entfernt, Stemming bedeutet die Normalisierung des Wortes auf einen gemeinsamen Wortstamm und Synonyme verwalten verwandte Begriffe.

Wortfeld
Dieser Typ steht für Attribute, deren Text als Ganzes und unbehandelt indexiert werden soll. Das bietet sich z.B. sehr bei Artikel- oder Seriennummern, Markennamen oder Wortgruppen an. So wird “Hilfiger Denim Jeans” genau so indexiert und nur genau so wieder gefunden. Wortfelder haben auch noch die Möglichkeit mehrere Werte als Array anzunehmen. Somit können alle Select- und Multiselect-Attribute als Wortfeld gespeichert werden, aber auch Textfelder mit definierten Wörtern sind dafür geeignet.

Es gibt auch die Möglichkeit Attribute auszuschließen, diese müssen einfach auf “nicht verwenden” verknüpft werden. Alle unverknüpften Attribute werden in 2 Sammelfelder gespeichert. Alle Select- und Multiselect Attribute kommen in ein Sammel-Wortfeld und alle Textfelder in ein Sammel-Textfeld. Somit werden zumindest keine Inhalte “vergessen” und können gefunden werden, sofern sie nicht ausgeschlossen wurden.

Der Auftrag der Indexierung erfolgt über die Standardmethoden von Magento. Bei jeder Änderung der Attribut Verknüfpung wird auch das Indexierungsflag für die Katalogsuche gesetzt. Sind die Daten erstmal in Magefinder indexiert, kann gleich danach mit der Suche begonnen werden.

Ist die Indexierung erfolgt, wird auch die Magento Tabelle “catalogsearch_result” geleert und das Flag “is_processed” in der Tabelle “catalogsearch_query” auf “0″ gesetzt. Jede Suche wird nun direkt an Magefinder gestellt. Dazu war leider die einzige Erweiterung eines Core-Models notwendig. Damit das Ergebnis der Suchanfrage inkl. Textrelevanz direkt in die Tabelle geschrieben werden kann, musste das ResourceModel “catalogsearch/fulltext” überschrieben werden.

Somit sendet die Methode “prepareResult” den Suchbegriff an Magefinder und speichert die gefundenen Produkt-Id’s mit deren Textrelevanz in der Datenbank.

Hier ist wichtig zu erwähnen, dass Magefinder gleich ALLE gefundenen Produkte liefert. Somit ist das Paging im Frontend bereits wieder unabhängig von Magefinder. Wenn jemand nach “Intel Prozessor” sucht und Magefinder dabei 79 Produkte findet, wäre es sinnlos, die Ergebnisse in acht 10er-Blöcken zu liefern. Die Antwort als JSON mit nur 2 Werten pro Produkt ist dementsprechend schlank, dass auch große Trefferlisten rasch verarbeitet werden können. Außerdem arbeitet auch die Magento Datenbanksuche auf diese Weise, dass es gleich alle gefundenen Produkte in die Result Tabelle schreibt.

Somit kann Magento mit der Ergebnisliste selber die Anzeige im Frontend steuern und alle notwendigen Infos inklusive einer Filterung anzeigen. Die Stärke von Magefinder ist es nicht, das Auslesen der Daten aus dem EAV Model zu beschleunigen oder eine bessere Filterung zu bieten, sondern die richtigen Produkte zu finden.

Wie nun Magefinder selbst arbeitet, gibt es im nächsten Teil.

Die Kommentarfunktion ist geschlossen.