【问题标题】:How do I run a partial reindex in Magento 1.13?如何在 Magento 1.13 中运行部分重新索引?
【发布时间】:2026-01-09 17:40:01
【问题描述】:

我希望能够将所有索引设置为“按计划更新”,然后让它们像Magento says they should 一样在后台自动更新。问题是,这不会发生。没有自动重新索引的 cron 作业(请参阅 this related question)。

那么,如果我必须创建自己的 cron 作业,我该如何以一种有效的方式准确地做到这一点?我不想运行“php shell/indexer.php reindexall”。这会完全重建索​​引表。当然,我可以每晚都这样做,但这意味着在第二天之前不会在前端反映任何更改。这不是一个可接受的解决方案。如果我一整天都在运行完整的重新索引,我最终会遇到与现在相同的问题 - 表锁定和由于人们在管理员中工作时重新索引而导致的缓慢。

Magento 新的“部分重新索引”应该可以解决这个问题吗?

这是我对其工作原理的理解:

  1. 我编辑了具有相关索引的实体(例如产品)。
  2. 数据库触发器将记录添加到相关的更改日志表中。
  3. 稍后某些进程会读取更改日志表并重新索引这些特定实体

具体例子

  1. 我更新了“catalog_product_entity_varchar”中的一个值。
  2. 通过将新版本插入“catalog_product_flat_cl”和“catalogsearch_fulltext_cl”,数据库触发器“trg_catalog_product_entity_varchar_after_update”将此产品标记为已更改。
  3. 部分重新索引进程读取这些更改日志表,并仅重新索引提及的产品分别为“catalog_product_flat”和“catalogsearch_fulltext”。

如果是这种情况,重新索引过程将是最小的并且可以经常运行。甚至每分钟索引对管理员用户来说几乎是不明显的。 (我说每一分钟,因为 Magento 告诉我们这是可能的)

然而,在此版本中,平面目录会为您更新 - 每分钟更新一次,或根据您的 Magento cron 作业。

这个神秘的部分重新索引在哪里?如何调用它而不是重新索引所有内容?

有 reindexPartial() 吗?

【问题讨论】:

    标签: magento indexing magento-1.13


    【解决方案1】:

    enterprise_refresh_index cron 作业似乎在运行它。每次 Magento cron 运行时它都会运行。请参阅 Enterprise_Index_Model_Observer::refreshIndex()。

    这不打算手动运行,因为需要建立一个锁定文件。如果您需要手动重新索引,最简单的方法是运行 cron.php 文件。

    我相信我只是有一个项目特定的问题,它没有运行。

    【讨论】:

      【解决方案2】:

      部分重新索引是通过 Magento 内置的 cron 作业操作符执行的。您不需要运行实际的 indexer.php 文件。相反,您必须根据文档设置 Magento 内置的 Cron 调度程序。

      文档: http://www.magentocommerce.com/wiki/groups/227/setting_up_magento_in_cron

      您只需执行 cron.php 文件,该文件将依次调用部分重新索引过程。

      php5-cli -f /home/USERNAME/public_html/cron.php
      

      工作原理:

      1. 对实体进行了更改并标记为重新索引。
      2. cronjob 执行 cron.php 文件
      3. Magento 检查它将运行哪些 cron 任务,并运行部分重新索引过程
      4. 索引过程将查看更改的实体并使用新值更新索引表。

      【讨论】:

      • 您能否提供一个执行部分重新索引的 cron 作业的直接示例?我启用了 crons 并看着它们运行,但没有看到任何东西。我知道价格是在凌晨 2 点专门重新索引的,但是其他索引呢?
      • 我还查看了新的 enterprise_queue_task 表,认为这个职责可能是队列驱动的,而不是特定的 cron 进程。不..据我所知,价格重新指数也是一个完整的重新指数。我还没有在一般工作中看到“部分重新索引”或计划索引,所以我犹豫要不要打开它并依赖它。
      • @kirkmadera 索引器在需要时运行。如果您之前没有运行过 cron,enterprise_refresh_index cron 第一次运行可能需要很长时间,但之后它会快速运行并且只更新它需要的内容。