Wie die Indizierung in Magento funktioniert

30
  1. So funktioniert die Indizierung in Magento
  2. Was genau macht es?
  3. Warum ist es erforderlich?
sonam
quelle
Dieser Link: stackoverflow.com/questions/4945307/… sollte Ihnen helfen
TBI Infotech
Hier ist, wie seine Prozesse und Aktionen in Magento 2 magento.stackexchange.com/questions/90510/…
Yogesh Trivedi
Welche Version von Magento verwenden Sie? In Version 1.13 wurden viele Änderungen vorgenommen. Erwarten Sie daher Unterschiede in der Version vor dieser Version. Hier ist ein netter Blog-Beitrag, der das mView-Modul und die Indizierung in Version 1.13 von Magento erklärt: eschrade.com/page/…
Pitt

Antworten:

63

In Magento gibt es verschiedene Arten von Indizes.
Alle Indexer sind dazu da, die Dinge schneller laufen zu lassen.
Ich werde hier nur einige davon behandeln.

Flat Index
Es gibt 2 solcher Indizes. Eine für Kategorien und eine für Produkte.
Standardmäßig sind Kategorie- und Produktentitäten (sowie Kunden und Kundenadressen, die in dieser Situation jedoch nicht wichtig sind) EAV- Entitäten. Dies ist sehr schön für die Erweiterbarkeit. Aber es ist ein Leistungskiller, weil Sie viele Verknüpfungen oder mehrere Abfragen benötigen, um alle Werte für alle Attribute zu erhalten.
Hier kommt der Flat Indexer ins Spiel.
Es wandelt die EAV-Struktur in eine flache Struktur um. Ich meine, es erstellt eine Tabelle (eine für jede Geschäftsansicht in Magento), die eine Spalte hat, die einem Attribut entspricht. Dadurch wird die Auswahl schneller. Für Kategorien werden alle Attribute in Tabellenspalten konvertiert. Für Produkte nur die, die Sie als "In der Produktliste verwendet" markieren, da Sie alle Arten von Produkten mit unterschiedlichen Attributen verkaufen können und die Erstellung einer einzigen Tabelle mit Milliarden Spalten möglicherweise nicht möglich ist.
Einige Produkte sind möglicherweise deaktiviert oder gehören nicht zu einer bestimmten Website, und es ist nicht erforderlich, sie in die Sucheinträge aufzunehmen. Sie werden vom Indexer ausgeschlossen.
Die generierten flachen Tabellen werden zum Lesen von Daten im Frontend verwendet. Das Backend verwendet weiterhin die EAV-Struktur.

Katalogsuchindex
Sie können anhand vieler Attributwerte nach Produkten suchen. Einige von ihnen sind möglicherweise nicht in den vom flachen Indexer generierten flachen Tabellen enthalten. Dieser Index füllt eine Tabelle mit den durchsuchbaren Attributwerten für Produkte, damit Sie sie leichter anhand von Schlüsselwörtern suchen können. Wenn Sie alle Informationen in einer Tabelle (oder einem Feld) haben, können Sie die Volltextsuche verwenden und relevante Ergebnisse erhalten.

Produktpreise .
Der Preis eines Produkts kann durch viele Variablen beeinflusst werden. Zum Beispiel Regeln für Kundengruppen, Websites und Katalograbatte.
Wie oben bedeutet das Erhalten der Produkte mit ihren Preisen eine Menge Beitritte oder Mehrfachauswahl. Außerdem haben Bundle-Produkte ein seltsames Preissystem. Dieser Indexer aggregiert die Daten in einigen Tabellen ( catalog_product_index_price_*) und erleichtert die Auswahl (Sortieren und Filtern) erheblich.

Catalog url Rewrites Bereinigt
die Regeln zum Umschreiben von URLs, indem festgelegt wird, welche URL welchem ​​Produkt oder welcher Kategorie entspricht. Auf diese Weise kann das interne System der URL-Verwaltung leichter entscheiden, welche Seite beim Aufrufen einer nicht standardmäßigen URL angezeigt werden soll. Anstatt alle Produkt- und Kategorien-URL-Schlüssel zu durchsuchen, wird nur in einer Tabelle gesucht.

Kategorieprodukte
In Magento können Sie ein Kategorieattribut mit dem Namen 'Is Anchor' auf true oder false setzen. Wenn dies zutrifft, werden in der betreffenden Kategorie alle Produkte aus den untergeordneten Kategorien aufgelistet. Um diese Echtzeit zu ermitteln, sind wiederum mehr Ressourcen erforderlich als nur das Lesen einer Tabelle. Dieser Indexer erstellt die Verknüpfung zwischen Produkten und Kategorien auf der Grundlage der Verknüpfungen, die Sie im Backend festgelegt haben, und dem Flag "Ist Anker" in den Kategorien.

Lagerstatus
Für einfache Produkte ist es einfach. Sie können vorrätig oder nicht vorrätig sein, aber für konfigurierbar, gruppiert und gebündelt ist das nicht so einfach. Sie können vorrätig oder nicht vorrätig sein, abhängig von den untergeordneten Produkten, die dem Hauptprodukt zugeordnet sind. Auch hier (ich wiederhole mich hier nur) würde das Abrufen des Status in Echtzeit eine Menge Fragen bedeuten.

Produktattribute .
Dieser sammelt alle Attribute, die aus demselben Grund in der geschichteten Navigation verwendet werden können. Sie alle an einem Ort haben, um schneller lesen zu können.

Tag-Aggregation
Ich habe keine Ahnung, was dies bewirkt. Ich habe in einem echten Live-Projekt noch nie Tags verwendet.

Marius
quelle
danke marius das ist soweit die beste
antwort
Was meinten Sie, als Sie sagten, dass flache Tabellen nur im Frontend verwendet werden (und das Backend weiterhin die EAV-Struktur verwendet)? Ich bin ein Neuling, und nach meinem Verständnis werden beim Erstellen / Aktualisieren von Entitäten wie Produkten weiterhin die EAV-Tabellen verwendet, um diese Vorgänge auszuführen, und wir müssen die Option festlegen, die flachen Tabellen beim Speichern zu aktualisieren oder sie manuell zu aktualisieren Diese Änderungen werden in flachen Tabellen wiedergegeben. Beziehen Sie sich auf diesen Prozess, als Sie das sagten? Könnten Sie das bitte näher erläutern? Vielen Dank!
Bharadwaj Srigiriraju
1
@Marius: Beim erneuten Indizieren erhalte ich den Fehler, dass die Tabelle voll ist. Bitte helfen Sie. Fehler ich bin immer ist die Tabelle ‚catalog_product_index_price_bundle_sel_tmp‘ ist voll
zed Blackbeard
1
@Marius Nach 3 Jahren dieser Antwort haben Sie jetzt eine Vorstellung von der Tag-Aggregation. Steht sie im Zusammenhang mit Produkt-Tags?
Murtuza Zabuawala
1
@Schwarz. Sie haben 2 Einstellungen für die Indizes. "Update on save" und "Manual". Beim Aktualisieren beim Speichern sollte alles automatisch geschehen, wenn Sie das Produkt speichern. Dies kann jedoch zu Leistungsproblemen führen. Zum Beispiel, wenn Sie mehrere Produkte gleichzeitig ändern. Für den manuellen Modus wird keine Neuindizierung sofort nach dem Speichern ausgelöst, Sie müssen sie jedoch manuell neu erstellen, wenn Sie fertig sind.
Marius
11

Das kann ich nicht gutschreiben, da es dem Originalbeitrag entnommen ist: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail

Die Indizierung von Magento ist nur im Geiste der Indizierung auf Datenbankebene ähnlich. Wie Anton feststellt, handelt es sich um einen Denormalisierungsprozess, um einen schnelleren Betrieb einer Site zu ermöglichen. Lassen Sie mich versuchen, einige der Gedanken zu erläutern, die hinter der Magento-Datenbankstruktur stehen, und zu erklären, warum die Indizierung für einen schnellen Betrieb erforderlich ist.

In einer "typischeren" MySQL-Datenbank wäre eine Tabelle zum Speichern von Katalogprodukten in etwa so aufgebaut:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...

Dies ist schnell abrufbar, stellt jedoch ein grundlegendes Problem für ein Teil der E-Commerce-Software dar: Was tun Sie, wenn Sie weitere Attribute hinzufügen möchten? Was ist, wenn Sie Spielzeug verkaufen und statt einer Größensäule age_range benötigen? Nun, Sie könnten eine weitere Spalte hinzufügen, aber es sollte klar sein, dass dies in einem großen Geschäft (z. B. Walmart) dazu führen würde, dass die Zeilen zu 90% leer sind und der Versuch, neue Attribute zu pflegen, so gut wie unmöglich ist.

Um dieses Problem zu lösen, teilt Magento Tabellen in kleinere Einheiten auf. Ich möchte in dieser Antwort nicht das gesamte EAV-System neu erstellen. Akzeptieren Sie daher dieses vereinfachte Modell:

PRODUCT:
    product_id INT
    sku        VARCHAR

PRODUCT_ATTRIBUTE_VALUES
    product_id   INT
    attribute_id INT
    value        MISC

PRODUCT_ATTRIBUTES
    attribute_id
    name

Jetzt ist es möglich, Attribute nach Belieben hinzuzufügen, indem Sie neue Werte in product_attributes eingeben und angrenzende Datensätze in product_attribute_values ​​einfügen. Dies ist im Grunde das, was Magento tut (mit etwas mehr Respekt für Datentypen, als ich hier angezeigt habe). Tatsächlich gibt es jetzt keinen Grund mehr für zwei Produkte, identische Felder zu haben, sodass wir ganze Produkttypen mit unterschiedlichen Attributen erstellen können!

Diese Flexibilität ist jedoch mit Kosten verbunden. Wenn ich die Farbe eines Hemdes in meinem System finden möchte (ein triviales Beispiel), muss ich Folgendes finden:

  1. Die product_id des Artikels (in der Produkttabelle)
  2. Die attribute_id für color (in der Attributtabelle)
  3. Schließlich der tatsächliche Wert (in der Tabelle attribute_values)

Magento hat früher so funktioniert, aber es war absolut langsam. Um eine bessere Leistung zu erzielen, haben sie einen Kompromiss eingegangen: Nachdem der Shop-Inhaber die gewünschten Attribute definiert hat, können Sie von Anfang an den großen Tisch generieren. Wenn sich etwas ändert, nuke es aus dem Weltraum und generiere es erneut. Auf diese Weise werden Daten in erster Linie in unserem ansprechenden flexiblen Format gespeichert, aber aus einer einzelnen Tabelle abgefragt.

Diese resultierenden Nachschlagetabellen sind die Magento "Indizes". Wenn Sie neu indizieren, sprengen Sie die alte Tabelle und generieren sie erneut.

Hoffe das klärt die Dinge ein bisschen!

Vince Pettit
quelle
nuke it from space, nett :)
Wietse
5

Magento ist ein ziemlich mächtiges und komplexes System. Es ermöglicht das Arbeiten mit riesigen Datenmengen, aber wenn die Datenbank mit Tonnen von Datensätzen überlastet ist, wird es schwer und langsam. Magento verwendet Indizes, um dieses Problem zu lösen. Indizes sind zusätzliche Datenbanktabellen mit einigen flachen Daten, mit denen schnelle Antworten aus der Datenbank organisiert werden können.

Standardmäßig aktualisiert das Kernsystem die Indizes für die Speicherung jedes Elements. In einigen Fällen müssen Sie dies jedoch manuell tun, beispielsweise für bestimmte Arten von Massenaktionen usw. Sie können die Indizes jederzeit über das Admin-Backend aktualisieren (Admin-> System-> Indexverwaltung). Aber manchmal verursacht es Probleme.

Wenn Sie beispielsweise über 10.000 Produkte und viele Kategorien verfügen, kann das Neuerstellen des Index zum Umschreiben der Katalog-URL Stunden dauern. Dann kann das PHP-Skript einfach brechen, weil die max_execution_time überschritten wird. Es gibt eine Möglichkeit, mehrere Probleme zu lösen, indem Sie den Neuindexierungsprozess über die Befehlszeile ausführen.

user9053
quelle