Я разработчик и новичок в мире Prestashop.
Я столкнулся с проблемой, на которую я еще не нашел правильного ответа с помощью Prestashop.
Я создаю ювелирный магазин с большим каталогом товаров (> 10 тыс.). Кольца доступны в материалах (например, золото) и в размере (20en). Затем количество вариаций увеличивается очень быстро. На 1000 товаров, 4 материала, 20 размеров у меня уже получилось 80к вариаций. И я еще далек от реальности каталога.
Мне удалось протестировать аналогичный каталог на пустом Prestashop, и оказалось, что такой объем сильно влияет на фасетный поиск, SQL-запросы легко занимают больше 10 секунд, что нецелесообразно.
Размер пальца - это информация, которая не является «нужной» для оформления заказа, одно и то же кольцо в разных размерах имеет один и тот же код товара. Затем можно было бы управлять размером пальца как опцией персонализации. С другой стороны, ценовая дельта может применяться к разным размерам. И эта дельта меняется в зависимости от материала... что действительно похоже на склонение. С другой стороны, у большинства колец НЕТ ценовой дельты по размеру, это остается исключением.
Поэтому я прошу вашей помощи и параллельно продолжаю свои исследования.
Есть ли способ оптимизировать многогранный поиск? (проанализировав исходный код модуля, на первый взгляд я бы сказал, что нет). Кто-нибудь когда-нибудь имел дело с очень большим каталогом товаров?
Если нет, есть ли модуль, позволяющий управлять вариантами персонализации с потенциальной ценой в зависимости от вариации?
Если готового решения не существует, какой подход вы считаете лучшим? ? (сохраняйте склонения и решайте производительность фасетного поиска, например, благодаря Elasticsearch, или управляйте размерами как небольшая расширенная персонализация?)
Большое спасибо за твою помощь
Редактировать :
Как и просили, вот медленный SQL-запрос, созданный модулем natiuve facetedsearch:
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
содержит 600 тыс. строк, а ps_product_attribute_combination
– 1,2 млн строк.
Спасибо