Dies funktioniert gut in Magento CE 1.6 und neuer:
$event =Mage::getSingleton('index/indexer')->logEvent(
$product,
$product->getResource()->getType(),Mage_Index_Model_Event::TYPE_SAVE,false);Mage::getSingleton('index/indexer')->getProcessByCode('catalog_url')// Adjust the indexer process code as needed->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)->processEvent($event);
Die verfügbaren Indexcodes können mithilfe der folgenden Abfrage angezeigt werden:
In Magento EE 1.13 ist das anders. Dort nimmt der Indexer bei jedem Cron-Lauf (jede Minute) automatisch geänderte Objekte auf.
AKTUALISIEREN
Die obige Antwort ist sowieso zu 100% richtig. Ich denke, die folgenden Informationen können noch etwas hinzufügen.
Wenn Sie nur wenige Attributwerte in einem Produkt ändern und die relative Indextabelle automatisch aktualisieren müssen, können Sie diese Funktion verwenden:
Mage::getSingleton('catalog/product_action')->updateAttributes();
Wenn Sie den Neuindex selbst verwalten möchten, verwenden Sie stattdessen das Ressourcenmodell: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Zum Beispiel verwende ich die folgende Funktion, um nur bestimmte Attribute in einem Produkt schnell zu aktualisieren.
Ich werde den Kommentar von user5973 hier kopieren, da er gelöscht wird. @ Vinai Wollen Sie damit sagen, dass EE 1.13+ diese Leistungsprobleme bei der Neuindizierung produktbezogener Daten nicht aufweist? Wo können wir bestätigen, dass der EE-Indexer geänderte Entitäten automatisch aufnimmt und nur diese verarbeitet?
Fabian Blechschmidt
In EE 1.13 verwendet der Indexer MySQL-Trigger, um Änderungen auf DB-Ebene zu erfassen und die aktualisierten Entitäts-IDs in einer Änderungsprotokolltabelle aufzuzeichnen. Diese Änderungsprotokolle werden dann über Cronjobs verarbeitet.
Vinai
2
Ich nehme an, Sie meinen, Sie möchten ein Produkt neu indizieren, nachdem Sie es in der Administrator-Benutzeroberfläche bearbeitet haben. Die einfachste Methode besteht darin, den Indexermodus auf "Beim Speichern aktualisieren" zu setzen. Sie müssten dies für alle Indexer tun, die sich auf Produkte beziehen, die Sie verwenden, wahrscheinlich einschließlich: Produktattribute, Produktpreise, Produkt-Flat-Daten, Kategorie Produkte, Lagerstatus.
Dies wird jedoch wahrscheinlich die Produktersparnis verlangsamen.
Stellen Sie sicher, dass Sie dies weder im Frontend noch beim Aktualisieren von Skripten tun und der aktuell geladene Speicher "admin" ist. Andernfalls funktioniert $ product-> save () überhaupt nicht. Überprüfen Sie zunächst, ob das Speichern eines Produkts Auswirkungen hat.
Stellen Sie neben der Antwort von @ feversocial auch sicher, dass Sie alles haben, was zum Laden des Produkts erforderlich ist, bevor Sie $ product-> save () aufrufen. Andernfalls kann das Speichern tatsächlich Dinge aus dem Produkt entfernen, die ich auf die harte Tour erlebt habe.
Als würde man das Produkt ohne SKU speichern, wodurch alle URL-Umschreibungen unterbrochen werden und die gesamte Website auf diese Produktseite umgeleitet wird: S: P.
Guter Punkt, deshalb denke ich, ist es besser, catolog/product_actionAnsatz zu verwenden , damit Sie das oben genannte Problem nicht riskieren
Fra
1
Diese Informationen können nützlich sein, um das gesamte Szenario ein wenig besser zu verstehen.
Wenn Sie nur einen Attributwert ändern und die relative Indextabelle automatisch aktualisieren müssen, können Sie diese Funktion verwenden:
Mage::getSingleton('catalog/product_action')->updateAttributes();
Wenn Sie den Neuindex selbst verwalten möchten, verwenden Sie stattdessen das Ressourcenmodell: Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Zum Beispiel verwende ich die folgende Funktion, um nur bestimmte Attribute in einem Produkt schnell zu aktualisieren.
Ich nehme an, Sie meinen, Sie möchten ein Produkt neu indizieren, nachdem Sie es in der Administrator-Benutzeroberfläche bearbeitet haben. Die einfachste Methode besteht darin, den Indexermodus auf "Beim Speichern aktualisieren" zu setzen. Sie müssten dies für alle Indexer tun, die sich auf Produkte beziehen, die Sie verwenden, wahrscheinlich einschließlich: Produktattribute, Produktpreise, Produkt-Flat-Daten, Kategorie Produkte, Lagerstatus.
Dies wird jedoch wahrscheinlich die Produktersparnis verlangsamen.
Alternativ hilft vielleicht dieser Link. Bitte beachten Sie die Kommentare sowie die Beschreibung der Aktualisierung des Bestands. http://www.magentocommerce.com/answers/discussion/239/reindex-one-product-at-a-time/p1
quelle
Stellen Sie sicher, dass Sie dies weder im Frontend noch beim Aktualisieren von Skripten tun und der aktuell geladene Speicher "admin" ist. Andernfalls funktioniert $ product-> save () überhaupt nicht. Überprüfen Sie zunächst, ob das Speichern eines Produkts Auswirkungen hat.
quelle
Stellen Sie neben der Antwort von @ feversocial auch sicher, dass Sie alles haben, was zum Laden des Produkts erforderlich ist, bevor Sie $ product-> save () aufrufen. Andernfalls kann das Speichern tatsächlich Dinge aus dem Produkt entfernen, die ich auf die harte Tour erlebt habe.
Als würde man das Produkt ohne SKU speichern, wodurch alle URL-Umschreibungen unterbrochen werden und die gesamte Website auf diese Produktseite umgeleitet wird: S: P.
quelle
catolog/product_action
Ansatz zu verwenden , damit Sie das oben genannte Problem nicht riskierenDiese Informationen können nützlich sein, um das gesamte Szenario ein wenig besser zu verstehen.
Wenn Sie nur einen Attributwert ändern und die relative Indextabelle automatisch aktualisieren müssen, können Sie diese Funktion verwenden:
Mage::getSingleton('catalog/product_action')->updateAttributes();
Wenn Sie den Neuindex selbst verwalten möchten, verwenden Sie stattdessen das Ressourcenmodell:
Mage::getResourceSingleton('catalog/product_action')->updateAttributes();
Zum Beispiel verwende ich die folgende Funktion, um nur bestimmte Attribute in einem Produkt schnell zu aktualisieren.
quelle