【发布时间】:2026-01-09 17:40:01
【问题描述】:
我希望能够将所有索引设置为“按计划更新”,然后让它们像Magento says they should 一样在后台自动更新。问题是,这不会发生。没有自动重新索引的 cron 作业(请参阅 this related question)。
那么,如果我必须创建自己的 cron 作业,我该如何以一种有效的方式准确地做到这一点?我不想运行“php shell/indexer.php reindexall”。这会完全重建索引表。当然,我可以每晚都这样做,但这意味着在第二天之前不会在前端反映任何更改。这不是一个可接受的解决方案。如果我一整天都在运行完整的重新索引,我最终会遇到与现在相同的问题 - 表锁定和由于人们在管理员中工作时重新索引而导致的缓慢。
Magento 新的“部分重新索引”应该可以解决这个问题吗?
这是我对其工作原理的理解:
- 我编辑了具有相关索引的实体(例如产品)。
- 数据库触发器将记录添加到相关的更改日志表中。
- 稍后某些进程会读取更改日志表并重新索引这些特定实体
具体例子
- 我更新了“catalog_product_entity_varchar”中的一个值。
- 通过将新版本插入“catalog_product_flat_cl”和“catalogsearch_fulltext_cl”,数据库触发器“trg_catalog_product_entity_varchar_after_update”将此产品标记为已更改。
- 部分重新索引进程读取这些更改日志表,并仅重新索引提及的产品分别为“catalog_product_flat”和“catalogsearch_fulltext”。
如果是这种情况,重新索引过程将是最小的并且可以经常运行。甚至每分钟索引对管理员用户来说几乎是不明显的。 (我说每一分钟,因为 Magento 告诉我们这是可能的)
然而,在此版本中,平面目录会为您更新 - 每分钟更新一次,或根据您的 Magento cron 作业。
这个神秘的部分重新索引在哪里?如何调用它而不是重新索引所有内容?
有 reindexPartial() 吗?
【问题讨论】:
标签: magento indexing magento-1.13