Magento: reindex & cronjob

14. September 2010 at 12:17

Den Indexierungsprozess per Cron bzw. aus der Bash oder Windows-Shell zu starten geht wie folgt (Auszug indexer.php doku):

Usage:  php -f  indexer.php -- [options]
--status <indexer>            Show Indexer(s) Status
--mode <indexer>              Show Indexer(s) Index Mode
--mode-realtime <indexer>     Set index mode type "Update on Save"
--mode-manual <indexer>       Set index mode type "Manual Update"
--reindex <indexer>           Reindex Data
info                          Show allowed indexers
reindexall                    Reindex Data by all indexers
help                          This help
<indexer>     Comma separated indexer codes or value "all" for all indexers

Mögliche Optionen sind (Ausgabe von „Info“):

catalog_product_attribute     Product Attributes
catalog_product_price         Product Prices
catalog_url                   Catalog URL Rewrites
catalog_product_flat          Product Flat Data
catalog_category_flat         Category Flat Data
catalog_category_product      Category Products
catalogsearch_fulltext        Catalog Search Index
tag_summary                   Tag Aggregation Data
cataloginventory_stock        Stock Status

Demnach ist ein Reindex einzelner Komponenten möglich über:

php /path/to/magento/shell/indexer.php --reindex catalog_product_flat

Tipp: Der  Script prüft ob Abhängigkeiten vorhanden sind, welche über die config.xml’s der einzelnen Module definiert werden. Diese sind in der Regel auch definiert, so kommt es ggf. zu einem ungewollten reindexall …

Quick & dirty (besser wäre die entsprechenden config.xml’s anzupassen) kann das umgangen werden durch auskommentieren der folgenden Zeilen in der function reindexEverything in der app/code/core/Mage/Index/Model/Process.php :

public function reindexEverything()
{
if ($this->getData('runed_reindexall')) {
return $this;
}
/*
if ($this->getDepends()) {
$indexer = Mage::getSingleton('index/indexer');
foreach ($this->getDepends() as $code) {
$process = $indexer->getProcessByCode($code);
if ($process) {
$process->reindexEverything();
}
}
}
*/
$this->setData('runed_reindexall', true);
return $this->reindexAll();
}
Usage:  php -f indexer.php — [options]

–status <indexer>            Show Indexer(s) Status
–mode <indexer>              Show Indexer(s) Index Mode
–mode-realtime <indexer>     Set index mode type „Update on Save“
–mode-manual <indexer>       Set index mode type „Manual Update“
–reindex <indexer>           Reindex Data
info                          Show allowed indexers
reindexall                    Reindex Data by all indexers
help                          This help

<indexer>     Comma separated indexer codes or value „all“ for all indexers