2012-03-26 56 views
3

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

我知道这是可能只需刷新所有产品的索引。例如,这将刷新价格指数上的所有产品:

$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 
); 

回答

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); 
+0

索引所有未完成的更改。嗨Zyava。你确定这对Magento 1.6有效吗?这基本上与我们在Magento 1.3安装上的代码基本相同,但似乎不适用于1.6。我可能做错了什么,但是我想我会问你是否已经成功地将它用于1.6版本? – shaune 2012-03-26 20:10:04

+0

它应该工作,因为我在'app \ code \ core \ Mage \ CatalogIndex \ Model \ Observer.php'中找到了这个代码,参见'processAfterSaveEvent()'方法。你确定你在脚本中选择了管理员存储('Mage :: app('admin')')? – Zyava 2012-03-27 06:11:48

+0

谢谢做代码搜索,但我绝对肯定它不起作用,至少不在magento ce 1.6.2.0上。它确实在1.3.3.0上工作。代码的这一部分基本上被剥夺了(尽管没有注释这么说) - 只要在代码库中搜索对该方法的引用,就会发现它并没有被调用过。我认为Mage_CatalogIndex模块被Mage_Index模块取代会发生什么。 – shaune 2012-03-27 15:43:37

1

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

+0

此方法是否将索引状态更改为“就绪”?运行此方法后,索引管理仍显示“需要索引”作为状态。 – Robi 2014-11-21 19:12:17