Автор Тема: Не работает поиск когда много товаров  (Прочитано 467 раз)

11 Августа 2014, 23:51:37
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!
Помогите решить проблему.
PrestaShop™ 1.5.4.1
Не работает поиск, когда много проиндексировано товаров.
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /home/s/***public_html/classes/Search.php on line 235, referer

Хостингом выделяется 128 М

Помогите решить.... :)
12 Августа 2014, 10:22:49
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13634
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Хостинг менять или уменьшать количество товаров с разрешением для поиска, у товара есть свойство "видимость".
12 Августа 2014, 11:05:51
Ответ #2
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Хостинг менять или уменьшать количество товаров с разрешением для поиска, у товара есть свойство "видимость".

Ну это конечно самое простое )
Видимо сделать его рабочим с меньшей памятью очень трудозатратно...
Выставить ограничение на память в скрипте, пусть например грузится дольше...  Бывает что-то вроде такого?
12 Августа 2014, 11:16:41
Ответ #3
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22215
  • Репутация: +17111/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Можно попробывать ограничить выборку и уменьшить размер потребляемой памяти.
В классе /classes/Search.php замените (примерно в 238 линии)
$sql = 'SELECT cp.`id_product`...на
$sql = 'SELECT DISTINCT cp.`id_product`...
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
12 Августа 2014, 11:42:33
Ответ #4
  • Новичок
  • *
  • Сообщений: 41
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Попробую!

Цитировать
DISTINCT
DISTINCT указывает базе данных исключать дупликаты из результата команды SELECT.
Пример:
SELECT DISTINCT vnum
FROM torder;
Здесь выбираются все различные (без дупликатов) элементы столбца vnum таблицы torder.

Т.е. если у меня нету повторяющихся позиций а все уникальные, то не сработает?
12 Августа 2014, 13:02:02
Ответ #5
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22215
  • Репутация: +17111/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Если все еще не будет хватать памяти, то можете еще в конце этого запроса, линия 251, заменить закрывающую скобку
)');на
)') . ' AND cp.`id_product` IN (' . $intersect_array[0] . ')';
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
12 Августа 2014, 13:07:37
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86331
  • Репутация: +25417/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Т.е. если у меня нету повторяющихся позиций а все уникальные, то не сработает?
Они есть.
Можно задать лимит в запросе, но тогда не все товары будут показанны в поиске.
LIMIT XXX';
12 Августа 2014, 13:25:39
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 1012
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
$sql = 'SELECT DISTINCT cp.`id_product`...
Реально снизилось потребление. У меня пости в 2 раза мень стало жрать память.
Это от комбинаций/аттрибутов? Я прав?
12 Августа 2014, 13:54:35
Ответ #8
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86331
  • Репутация: +25417/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Это от комбинаций/аттрибутов?
Да.