我想知道是否有办法更新一个或多个产品的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
);
答案 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();