Когда в Magento EE 1.13 действительно выполняется автоматическая частичная переиндексация?

В Magento 1.13 добавлена ​​частичная индексация для большинства индексов, а также возможность отложить процесс индексации для задания cron, которое выполняется асинхронно.

Тогда у меня вопрос: есть ли уже существующая работа cron, или я должен сам это настроить?

Документация не ясна по этому вопросу: http://www.magentocommerce.com/knowledge-base/entry/ee113-indexing

  • Обновляйте, когда запланировано переиндексация по расписанию, используя задание Magento cron.
  • Изменение происходит либо в течение минуты, либо в соответствии с вашим расписанием работы cron.

Это наводит меня на мысль, что это существующий процесс, который запускается каждый раз, когда запускается cron.

Я вижу график очистки индекса, но он, кажется, только для очистки старых записей в таблицах журнала изменений. Кажется, он не выполняет индексацию.

Я не могу найти работу cron в основном коде, который запускает эти индексы.

1 ответ

Я думаю, что нашел это. 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;
}

Это работает "всегда" при каждом выполнении cron. Он выполняет полную переиндексацию для нужных индексов и обрабатывает журнал изменений для тех, кто этого не делает.

Другие вопросы по тегам