3

我希望能够将所有索引设置为“按计划更新”,然后让它们全部自动更新,就像Magento 所说的那样,它们应该在后台进行。问题是,这不会发生。没有自动重新索引的 cron 作业(请参阅此相关问题)。

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

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

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

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

具体例子

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

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

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

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

有 reindexPartial() 吗?

内裤 + ?  = 利润

4

2 回答 2

2

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

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

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

于 2014-01-24T22:00:06.590 回答
1

部分重新索引是通过 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. 索引过程将看到更改的实体并使用新值更新索引表。
于 2014-01-24T07:40:42.350 回答