更新一个或多个特定产品的Magento索引

时间:2012-03-26 15:59:14

标签: magento

我想知道是否有办法更新一个或多个产品的magento索引。例如,我有100个产品,我只是以编程方式更新了价格......现在我需要启动索引器,以便重新索引这100个产品的价格。所以只是为了清晰......

我知道只需在所有产品上刷新一个索引即可。例如,这将刷新所有产品的定价指数:

$process = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_product_price');
$process->reindexEverything();

而且我也知道可以刷新一个产品上的所有索引(如果你在循环中这样做,可以刷新几个产品):

Mage::getSingleton('index/indexer')->processEntityAction(
  $product, Mage_Catalog_Model_Product::ENTITY, 
  Mage_Index_Model_Event::TYPE_SAVE
);

但是,这些选项都不适合我。我需要能够完成这两个选项的横截面。如何获取一个或多个产品,并刷新一个指数,例如价格指数?

我正在使用Magento CE 1.6.2.0。

编辑:顺便说一句,在Magento 1.3上,我通过执行以下操作来实现此目的,但这似乎不再适用。

Mage::getModel('catalogindex/indexer')->plainReindex(
  $listOfProductIds,
  Mage_CatalogIndex_Model_Indexer::REINDEX_TYPE_PRICE
);

2 个答案:

答案 0 :(得分:1)

尝试

Mage::getSingleton('catalogindex/indexer')->plainReindex($productIds);
Mage::getSingleton('catalogindex/aggregation')->clearProductData($productIds);

另一个想法:

Mage::getResourceModel('catalog/product_indexer_price')->reindexProductIds($productIds);

这个适用于我:

$catalogSearchIndexer = Mage::getResourceSingleton('catalogsearch/fulltext');
$catalogSearchIndexer->rebuildIndex($storeId, $productIds);

答案 1 :(得分:1)

如果您将索引模式设置为手动,它仍会跟踪index_event中的所有更改。您可以使用$process->indexEvents();

为所有待处理的更改编制索引