7

在此处输入图像描述我在 Magento 中面临一个问题。我有一个具有多网站功能的 Magento 商店,其中包含大约 4500 种产品。我想重新索引产品。

我通过 magento 默认功能通过 csv 导入了 4500 个产品。导入产品后,更改未显示在前端所以我去索引管理,我发现有两个索引处于处理状态

1 产品属性 2 产品平面数据

我已经完成了以下步骤:

1 尝试从管理端系统->索引管理重新索引它

2尝试通过调用php脚本手动执行

require_once 'app/Mage.php';
umask( 0 );
Mage :: app( "default" );
$process = Mage::getSingleton('index/indexer')->getProcessByCode('catalog_product_flat');
$process->reindexAll();

或者

$indexingProcesses = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
foreach ($indexingProcesses as $process) {
    $process->reindexEverything();
}

还将 var/locks 文件夹权限更改为 777 并重命名该文件夹,并尝试删除在此锁定文件夹中创建但未获得解决方案的 .lock 文件。

我没有 SSH 权限。那么有没有其他解决方案可以帮助我解决重新索引问题。

4

5 回答 5

6

注意:根据我的经验,虽然以下答案与此类问题有关,但它似乎不是提问者当前遇到的情况的原因

Processing表示以下两种情况之一:

  • 索引实际上可能仍在运行,在这种情况下,请坐等它们完成。Magento 索引可能需要很长时间(对于 4500 个产品,“小时”是可能的,具体取决于服务器)。

  • 一个索引器进程可能已经死亡,留下过时的锁。同时,失效的索引器可能已由其他用户运行。最常见的情况是cron被错误地配置为将索引器运行为root或普通用户帐户,而不是作为网站使用的同一用户(例如:apachewww)。

真正Processing的意思是“Magento 未能为这些索引器作业获取锁”。第一个案例是微不足道且无趣的。等待几个小时,如果相同的索引器仍然列为Processing,那么您可能遇到第二种情况。

检查锁定文件的权限,var/locks在您的 magento 根目录下找到。它们是否与运行 Web 服务器的用户相同?如果没有,并且您绝对确定索引不再运行,则删除锁是安全的。下一步是首先找出锁具有错误权限的原因。如果您没有ssh访问权限,那么与您的主机进行对话可能会更好。

于 2012-09-18T06:01:09.760 回答
1

默认情况下,来自索引器的错误将被捕获且不记录。典型的解决方法是使用 CLI 重新索引工具;这将是非常冗长的任何错误。

例如。

php shell/indexer.php --reindex ...

但是如果您没有 SSH 访问权限 - 您可以查看indexer.php文件以了解它们如何生成错误,或者您可以启动一个shell_execexec从一个模拟 CLI 的基于 Web 的 PHP 脚本。

于 2012-09-18T17:31:43.050 回答
0

原因

在 catalog_product_flat_% 表中有对不存在/已删除产品的引用。

解决方案

尝试在 MySQL 控制台或通过 phpMyAdmin 截断“catalog_product_flat_%”表(catalog_product_flat_1、catalog_product_flat_2、catalog_product_flat_3 等):

mysql > truncate table ´catalog_product_flat_1´;
mysql > truncate table ´catalog_product_flat_2´;
mysql > truncate table ´catalog_product_flat_3´;

然后重新索引。

于 2012-09-18T07:58:57.310 回答
0

我无法重新索引catalog_product_flat索引过程。花了一天时间在互联网上尝试了几种解决方案。我能够解决这个问题。下面是步骤。

  1. 创建面临索引问题的 Magento Db 的克隆。
  2. 将数据库转储到新创建的数据库中。
  3. 截断catalog_product_flat_1单个商店的表,对于多个商店,将有多个表catalog_product_flat_*,其中*商店 id 是。这里截断所有的表。
  4. 将 mangento 运行实例指向新创建的数据库并配置数据库,以便该站点正常运行。
  5. 现在运行命令php document_root/shell/indexer.php --reindex catalog_product_flat或尝试从管理员重新索引。php document_root/shell/indexer.php --reindexall用于重新索引所有过程。
于 2014-12-09T05:30:46.517 回答
0

我遇到了同样的问题,在创建新客户组时我无法重新索引价格。

在这里找到解决方案http://www.magikcommerce.com/blog/how-to-resolve-magento-reindexing-errors-in-your-magento-store/

这里的程序:

  1. 找到 var/locks 目录并删除该目录下的所有文件。这将清除所有锁定,以便再次进行重新索引。

  2. 现在,登录到您的 MysQSL/phpMyAdmin 以运行以下 MySQL 查询(确保在提交此 MySQL 查询之前已进行完整备份)

    DELETE cpop.* FROM catalog_product_option_price AS cpop INNER JOIN catalog_product_option AS cpo ON cpo.option_id = cpop.option_id WHERE cpo.type = 'checkbox' OR cpo.type = 'radio' OR cpo.type = 'drop_down';

    DELETE cpotp.* FROM catalog_product_option_type_price AS cpotp
    INNER JOIN catalog_product_option_type_value AS cpotv
    ON cpotv.option_type_id = cpotp.option_type_id
    INNER JOIN catalog_product_option AS cpo
    ON cpotv.option_id = cpo.option_id
    WHERE
    cpo.type <> 'checkbox' AND
    cpo.type <> 'radio' AND
    cpo.type <> 'drop_down';
    
  3. 重新登录到您的 Magento 管理面板并转到系统选项卡 > 索引管理再次点击索引,您会注意到不会再次出现此类错误。如果将来停止重新索引以解决Magento ReIndexing问题,您可以再次执行这些相同的步骤。

于 2015-10-31T09:47:35.730 回答