2014-01-23 3 views
6

Mit Magento 1.13 wurde für die meisten Indizes eine partielle Indizierung hinzugefügt, und der Indexierungsprozess kann auf einen Cron-Job verschoben werden, der asynchron ausgeführt wird.Wann läuft die automatische partielle Neuindizierung tatsächlich in Magento EE 1.13?

Meine Frage ist dann, gibt es einen bestehenden Cron-Job, der das tut oder ist das etwas, das ich selbst einrichten muss?

Die Dokumentation ist nicht klar dazu: http://www.magentocommerce.com/knowledge-base/entry/ee113-indexing#reindex-options

  • aktualisieren, wenn geplant planen Ihre Magento Cron-Job reindexing verwenden.
  • Die Änderung erfolgt entweder innerhalb der Minute oder gemäß Ihrem Cron-Jobplan.

Dies führt mich ist es ein vorhandener Prozess zu glauben, dass jedes Mal die cron läuft läuft.

Ich sehe den Index-Reiniger-Zeitplan, aber das scheint nur alte Datensätze in den Änderungsprotokolltabellen zu löschen. Es scheint keine Indexierung zu geben.

Ich kann nicht scheinen, einen cron Job im Kerncode zu finden, der diese Indizes laufen lässt.

Antwort

9

Ich denke, ich habe es gefunden. enterprise_refresh_index

<enterprise_refresh_index> 
    <schedule> 
     <cron_expr>always</cron_expr> 
    </schedule> 
    <run> 
     <model>enterprise_index/observer::refreshIndex</model> 
    </run> 
</enterprise_refresh_index> 

public function refreshIndex(Mage_Cron_Model_Schedule $schedule) 
{ 
    /** @var $helper Enterprise_Index_Helper_Data */ 
    $helper = Mage::helper('enterprise_index'); 

    /** @var $lock Enterprise_Index_Model_Lock */ 
    $lock = Enterprise_Index_Model_Lock::getInstance(); 

    if ($lock->setLock(self::REINDEX_FULL_LOCK)) { 

     /** 
     * Workaround for fatals and memory crashes: Invalidating indexers that are in progress 
     * Successful lock setting is considered that no other full reindex processes are running 
     */ 
     $this->_invalidateInProgressIndexers(); 

     $client = Mage::getModel('enterprise_mview/client'); 
     try { 

      //full re-index 
      $inactiveIndexes = $this->_getInactiveIndexersByPriority(); 
      $rebuiltIndexes = array(); 
      foreach ($inactiveIndexes as $inactiveIndexer) { 
       $tableName = (string)$inactiveIndexer->index_table; 
       $actionName = (string)$inactiveIndexer->action_model->all; 
       $client->init($tableName); 
       if ($actionName) { 
        $client->execute($actionName); 
        $rebuiltIndexes[] = $tableName; 
       } 
      } 

      //re-index by changelog 
      $indexers = $helper->getIndexers(true); 
      foreach ($indexers as $indexerName => $indexerData) { 
       $indexTable = (string)$indexerData->index_table; 
       $actionName = (string)$indexerData->action_model->changelog; 
       $client->init($indexTable); 
       if (isset($actionName) && !in_array($indexTable, $rebuiltIndexes)) { 
        $client->execute($actionName); 
       } 
      } 

     } catch (Exception $e) { 
      $lock->releaseLock(self::REINDEX_FULL_LOCK); 
      throw $e; 
     } 

     $lock->releaseLock(self::REINDEX_FULL_LOCK); 
    } 

    return $this; 
} 

Dies läuft "immer" auf jeden Cron Ausführung. Es führt vollständige Neuindizes für die Indizes aus, die das Änderungsprotokoll benötigen und verarbeiten, und für diejenigen, die dies nicht tun.

Verwandte Themen