如何管理大量产品变体?

时间:2020-04-15 10:37:03

标签: prestashop prestashop-1.7

我是开发人员,并且是Prestashop世界的新手。

我面临的一个问题是我尚未找到正确的方法来使用Prestashop进行响应。

我正在建立一家拥有大型产品目录(> 10k)的珠宝店。戒指有各种材料(例如金)和尺寸(20 en)。这样,变化的数量就会迅速增加。对于1000种产品,4种材料,20种尺寸,我已经有了8万种产品。而且距离目录的现实还很遥远。

我能够在空白的Prestashop上测试类似的目录,事实证明,多面搜索受此数量的影响很大,SQL查询很容易花费超过10s,这是不可行的。

手指大小是订单准备中不必要的信息,不同大小的同一枚戒指具有相同的产品代码。然后可以将手指的大小作为个性化选项进行管理。另一方面,价格差异可以应用于不同的大小。而且这个变化量取决于材料……这确实看起来像磁偏角。另一方面,大多数戒指的价格都没有价格差,这仍然是个例外。

因此,我寻求您的帮助,并继续进行我的研究。
有没有一种方法可以优化多面搜索? (已经分析了模块的源代码,乍一看我会拒绝)。有没有人处理过非常庞大的产品目录?
如果不是,是否存在一个模块,该模块允许通过变化来管理具有潜在价格的个性化选项?
如果没有交钥匙解决方案,您认为最佳方法是什么? (例如,要保持弹性并解决多面搜索的性能问题,例如要感谢Elasticsearch,还是像高级高级个性化一样管理尺寸?)

非常感谢您的帮助

编辑:

根据要求,这是由natiuve facetedsearch模块构建的慢速SQL查询:

SELECT p.id_product,
       p.id_manufacturer,
       SUM(sa.quantity) as quantity,
       p.condition,
       p.weight,
       p.price,
       cp.position
FROM ps_product p
         LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
         LEFT JOIN ps_product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
         LEFT JOIN ps_stock_available sa ON (p.id_product = sa.id_product AND
                                             IFNULL(pac.id_product_attribute, 0) = sa.id_product_attribute AND
                                             sa.id_shop = 1 AND sa.id_shop_group = 0)
         INNER JOIN ps_category_product cp ON (p.id_product = cp.id_product)
         INNER JOIN ps_category c ON (cp.id_category = c.id_category AND c.active = 1)
         INNER JOIN ps_product_shop ps ON (p.id_product = ps.id_product AND ps.id_shop = 1 AND ps.active = TRUE)
WHERE ((pac.id_attribute = 1))
  AND p.visibility IN ('both', 'catalog')
  AND c.nleft >= 3
  AND c.nright <= 4
  AND ps.id_shop = '1'
GROUP BY p.id_product

ps_product_attribute包含60万行,ps_product_attribute_combination包含120万行。

谢谢

1 个答案:

答案 0 :(得分:0)

您应该保持变化(我认为prestashop称其为组合),创建自定义定价机制会很麻烦,因为您必须在不同的位置实施该定价机制,并且某些模块甚至可能直接检查数据库中的价格。另外,大多数prestashop查询都很简单并且可以正确使用id,因此它们足够快来处理大型数据库。

ps_facetedsearch是使用一些索引表的模块。也许该索引很慢,或者可能需要一些时间来建立。如果索引构建缓慢,则可以不时(在目录导入或产品修改之后)触发它。如果从本质上讲它很慢,那么最好的选择就是使用效率更高的索引制作自己的facetedsearch模块。

相关问题