我对Magento索引流程有一些疑问:
答案 0 :(得分:5)
三部分答案,所以这应该值三分,对吧? :)
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。如何使用它有一些很棒的blog posts。您可以使用Mage_CatalogIndex_Model_Indexer
等将密钥代码包装在Varien_Profiler::start('Indexer')
中以检查所用的时间。
答案 1 :(得分:3)
为了扩展Jonathan的答案,每次保存产品时运行整个索引都是愚蠢的。 Magento对类别产品之类的索引过程涉及截断表并再次运行索引查询。如果您要保存20种不同的产品,并为每种产品重新生成索引,那么您将浪费大量时间。由于系统无法猜测您何时连续保存20个产品,因此您需要自己运行索引。