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