【问题标题】:Update Magento index for one or more specific products更新一种或多种特定产品的 Magento 索引
【发布时间】:2013-10-08 10:14:23
【问题描述】:

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

【问题讨论】:

    标签: magento


    【解决方案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);
    

    【讨论】:

    • 你好 Zyava。你确定这适用于 Magento 1.6 吗?这基本上与我们在 Magento 1.3 安装上工作的代码相同,但似乎不适用于 1.6。我可能做错了什么,但我想我会问你是否成功地让它在 1.6 上工作?
    • 它应该可以工作,因为我在app\code\core\Mage\CatalogIndex\Model\Observer.php 中找到了此代码,请参阅方法processAfterSaveEvent()。您确定在脚本中选择了管理存储 (Mage::app('admin'))?
    • 感谢进行代码搜索,但我绝对确定它不起作用,至少在 magento ce 1.6.2.0 上不起作用。它确实可以在 1.3.3.0 上运行。这部分代码基本上被贬低了(即使没有注释这么说)——只需在代码库中搜索对该方法的引用,您就会发现它从未被调用过。我认为发生的事情是 Mage_CatalogIndex 模块被 Mage_Index 模块取代。
    • 看来你是对的。我用另一个想法更新了我的答案。
    • 感谢您尝试 Zyava,但似乎更新的答案在 Magento CE 1.6.2.0 上也不起作用。 Mage_CatalogIndex 模块似乎与 catalogindex_* 表有关,我认为不再使用它。较新的 Mage_Index 模块更新与 catalog_product_index* 表(以及其他一些表)相关联,并且看起来目录页面查看诸如 catalog_product_index_price 之类的表以查找定价信息(而不是像以前那样查看 catalogindex_price 和 catalogindex_minimal_price 在 v 1.3).
    【解决方案2】:

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

    【讨论】:

    • 此方法是否将索引状态更改为“就绪”?运行此方法后,索引管理仍显示“需要索引”为状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多