Magento Индексация каталожных товаров и их атрибутов - PullRequest
3 голосов
/ 10 марта 2011

У меня есть несколько запросов для процесса индексации Magento:

  • Прежде всего, почему Magento не выполняет процесс индексации программно, после того, как каждый Продукт или какой-либо из его атрибутов добавлен / изменен? Почему администраторы требуют индексирования, когда процессы индексации очень важны и могут быть выполнены программно?
  • В каждом процессе индексации индексируются все продукты (включая те, которые уже были проиндексированы), когда нажимается ссылка "Переиндексировать данные" или индексируются только неиндексированные продукты?
  • Если я хочу просмотреть / отладить время, затрачиваемое на каждый процесс индексации, то что и как мне нужно будет сделать?

Ответы [ 2 ]

5 голосов
/ 10 марта 2011

Три части ответа, так что это должно стоить тройных очков, верно? :)

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

2) Все продукты переиндексированы. Если вы заглянете в Mage_CatalogIndex_Model_Indexer :: plainReindex (), вы увидите, что он выполняет clear, чтобы удалить все данные индекса, прежде чем все активные продукты будут проиндексированы.

$this->_getResource()->clear(
            $attributeCodes,
            $priceAttributeCodes,
            count($priceAttributeCodes)>0,
            count($priceAttributeCodes)>0,
            count($priceAttributeCodes)>0,
            $products,
            $stores
);

<snip/>

$collection = $this->_getProductCollection($store, $products);
$collection->addAttributeToFilter(
         'status',
          array('in'=>Mage::getModel('catalog/product_status')->getSaleableStatusIds())
);
$this->_walkCollection($collection, $store, $attributeCodes);

где метод _walkCollection создает индекс для каждого продукта.

3) Вы можете включить Profiler. Есть несколько замечательных блогов постов о том, как их использовать. Вы можете обернуть код ключа в Mage_CatalogIndex_Model_Indexer с помощью Varien_Profiler::start('Indexer') и т. Д., Чтобы проверить время.

3 голосов
/ 10 марта 2011

Чтобы немного расширить ответ Джонатана, было бы глупо запускать целые индексы каждый раз при сохранении продукта. Процесс индексации в Magento для таких продуктов, как продукты категорий, включает усечение таблиц и повторный запуск запросов индекса. Если бы вы сохранили 20 различных продуктов, и индексы были регенерированы для каждого из них, вы бы потратили много времени. Поскольку система не может угадать, когда вы хотите сохранить 20 продуктов подряд, вместо этого вы должны сами запустить свои индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...