5

尝试启用和重新索引产品平面数据时 - 从 magento 收到错误

平面目录模块限制为 64 个可过滤和/或可排序的属性。目前有521个。请减少可过滤/可排序属性的数量以使用此模块。

我无法理解这意味着什么以及 magento 从哪里获得这些值。在属性中,我只有 321 个不同的属性,所以 magento 从哪里获得当前使用的 521 的值以及其中 64 个的限制?

谢谢。

4

2 回答 2

5

Mage_Catalog_Model_Resource_Product_Flat_Indexer::prepareFlatTable()您的产品超过

<global>
    <catalog>
        <product>
            <flat>
                <max_index_count>64</max_index_count>
            </flat>
        </product>
    </catalog>
</global>

索引。这个最大值通常在app/code/core/Mage/Catalog/etc/config.xml默认 mySQL 安装允许的 64 个键的最大数量中定义并匹配,在它们出现错误之前

ERROR 1069: Too many keys specified. Max 64 keys allowed

您的问题不是您的产品有多少属性,而是其中有多少是可过滤和/或可排序的(当然,您的所有属性除外)。

跟踪Mage_Catalog_Model_Resource_Product_Flat_Indexer::getFlatIndexes()以了解 Magento 如何达到总共 521 个索引。

为了快速检查,您还可以查看您的catalog_eav_attribute表并检查有多少属性是可过滤的 ( is_filterable = 1) 和/或可排序的 ( used_for_sort_by= 1)

于 2012-05-10T15:03:27.457 回答
4

您收到的错误来自以下文件:

/app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product/Flat|Indexer.php

似乎此限制是在位于以下文件中的目录 config.xml 文件中设置的:

/app/code/core/Mage/Catalog/etc|config.xml

搜索“max_index_count”,您会发现该值设置为 64。

我不确定为什么会有这个限制,但我不得不想象他们有充分的理由将其设置为 64。发生)你可以改变这个值,看看会发生什么。

您拥有的索引数(521)来自 Indexer.php 文件中的 getFlatIndexes 函数。我猜你是 521 因为你有你的 321 + Magento 默认使用的一些额外的。

如果我不得不猜测,这个限制是为了防止平面目录表在水平方向上变得太大。我猜当表格太大时会出现速度问题。

于 2012-05-10T14:47:13.703 回答