Magento目录产品索引&它的属性

时间:2011-03-10 10:40:37

标签: magento indexing

我对Magento索引流程有一些疑问:

  • 首先,为什么Magento在新添加/修改每个产品或其任何属性后,不会以编程方式执行索引过程?当索引过程非常重要时,为什么管理员需要进行索引?可以通过编程方式完成吗?
  • 在每个索引流程中,所有产品都已编制索引(包括那些已经编入索引的产品),点击“Reindex数据”链接,还是只对非索引产品编制索引?
  • 如果我想查看/调试每个索引过程所花费的时间,那么&我该怎么办?

2 个答案:

答案 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个产品,因此您需要自己运行索引。