Как пересоздать фасетный индекс, если много товаров
В данной статье пойдет речь как создавать фасетный индекс, если товаров очень много. Ну прям настолько много, что переиндексация через админку занимает много времени. Сидеть и ждать с открытым браузером неудобно, а если у вас еще и обмен с 1С, в ходе которого периодически могут прилетать новые свойства – нужно также периодически запускать переиндексацию и ждать, ждать.
Лучший вариант для решения такой задачи – это делегировать переиндексацию фасетов самому серверу.
Для реализации данного способа необходимы навыки разработчика
Я не буду объяснять как искать кусок кода в модуле Битрикса, который отвечает за переиндексацию. А просто приведу уже оттесанный временем исходный код скрипта, который нужно будет повесить на крон на стороне сервера.
Вообще я советую вам учиться находить нужные фрагменты кода в модулях Битриксе. Все же, навык разбираться в коде других разработчиков благотворно влияет на наш растущий профессионализм.
Итак, листинг кода:
Инструкция на случай «не знаю что дальше делать»:
- Создаем файл с данным кодом где-нибудь в папке local или в модуле с классами проекта или по старинке создать в /bitrix/php_interface/cron/.
- Заменяем ID инфоблока с товарами.
- Вешаем скрипт на крон через консольную команду crontab -e или, если у вас шаред хостинг, через панель управления.
0 0 */7 * * /usr/bin/php -f /home/bitrix/ext_www/test.web-masterok.ga/bitrix/php_interface/cron/reindex.php
Замените путь к файлу на свой. В моем случае скрипт отрабатывает каждую неделю ровно в полночь. Если нужно по-другому – меняем.
Кстати, советую сервис crontab.guru, с помощью которого можно быстро и правильно настроить время отработки скрипта по расписанию.
Недостатки скрипта
В приведенном мною скрипте есть недочет, он принудительно пересоздает фасеты, что не рационально. Но есть решение…
В дальнейшем в другой статье я добавлю листинг класса, который умеет проверять, есть ли потребность в переиндексации фасетного индекса.
Также, не рекомендую устанавливать выполнение фасетов на то время, когда у вас по расписанию выполняется обработка другого скрипта, например, с созданием бекапа на кроне.
Итоги
Такой вот скрипт поможет вам выполнять переиндексацию фасетов для вашего каталога по расписанию. Данный способ особенно актуален, если на сайте десятки-сотни тысячи товаров и периодически добавляются новые свойства.
Новые записи
- Запуск скрипта в консоли в фоновом режиме
- Авторизация на сайте без пароля
- Аудит сайта на Битрикс. Часть 2. Проверка системы
- Как снять бекап базы в Битрикс?
- Подробная статья про функции отладки кода в Битрикс
Фасетный индекс битрикс что это
Нашли ошибку? Выделите мышкой и нажмите Ctrl+Enter
Фасетные индексы
Фасетные индексы ускоряют работу умного фильтра. Обычно умному фильтру нужно перебрать все товары каталога и сравнить их свойства с заданными параметрами. Если товаров много, такой процесс может занять определенное время. Фасета же заранее просчитывает и составляет варианты запросов, сохраняет в системе и выдает по запросу.
Одному каталогу соответствует один фасетный индекс. Он нужен для того, чтобы поиск по каталогу осуществлялся максимально быстро. После того, как вы внесли изменения в настройки умного фильтра, проверьте состояние фасетных индексов (особенно если заметили, что внесенные вами изменения не отобразились).
В административном разделе перейдите в Рабочий стол → Контент → Инфоблоки Фасетные индексы
Если состояние индекса «Работает» и горит зеленый индикатор, то все в порядке. Если же индикатор красный и появилась кнопка «Создать», то нажмите «гамбургер» и выберите соответствующий пункт.
В списке «Информационный блок» выберите «Каталог товаров». В поле «Шаг» можете оставить значение по умолчанию.
Вы можете при необходимости отключить фасетный индекс, но делать это не рекомендуется.
Bitrix отключается фасетный индекс на товары?
Подскажите, почему сбрасывается фасетный индекс на товары? создаю его, через некоторое время он в статусе ОТКЛЮЧЕН. и так постоянно.
Предполагаю, что из-за нестандартного обмена между 1С, но это появилось недавно, а модуль обмена мы уже не трогали больше полугода и всё норм было.
В модуле обмена обновляются цены, остаток, ндс, кратность и часть свойств элемента
вот часть из модуля обмена где затрагивается элемент:
. \Bitrix\Catalog\PriceTable::add(Array('PRODUCT_ID'=>intval($arFields["ID"]),'PRICE' => $arData["PRODUCT_PRICE"],'PRICE_SCALE' => $arData["PRODUCT_PRICE"],'CURRENCY'=>'RUB','CATALOG_GROUP_ID'=>1)); . CIBlockElement::SetPropertyValuesEx($arData['PRODUCT_ID'], $arData['IBLOCK_ID'], array('MINIMUM_PRICE' => floatval($arData["PRODUCT_PRICE"]))); CIBlockElement::SetPropertyValuesEx($arData['PRODUCT_ID'], $arData['IBLOCK_ID'], array('MAXIMUM_PRICE' => floatval($arData["PRODUCT_PRICE"]))); . \Bitrix\Catalog\StoreProductTable::update($arStoreProduct['ID'], Array('PRODUCT_ID'=>intval($arFields["ID"]),'STORE_ID'=>1,'AMOUNT' => $arData["PRODUCT_QUANTITY"])); . $catalogUpdateFields = ['QUANTITY' => $arData["PRODUCT_QUANTITY"]]; if(COption::GetOptionString(self::MODULE_ID, 'AGENT_EXCHANGE1C_VAT')=='Y'&&$arData['VAT']!='') < $catalogUpdateFields['VAT_ID'] = self::$arVat[$arData['VAT']]; $catalogUpdateFields['VAT_INCLUDED'] = 'Y'; >CCatalogProduct::update($arData['PRODUCT_ID'], $catalogUpdateFields); $iblockUpdate = \Bitrix\Iblock\ElementTable::update($arData['PRODUCT_ID'],['TIMESTAMP_X'=>date('d.m.Y H:i:s')]); .
- Вопрос задан более трёх лет назад
- 910 просмотров
3 комментария
Простой 3 комментария
Фасетный индекс битрикс что это
Нашли ошибку? Выделите мышкой и нажмите Ctrl+Enter
Фасетные индексы
Фасетные индексы ускоряют работу умного фильтра. Обычно умному фильтру нужно перебрать все товары каталога и сравнить их свойства с заданными параметрами. Если товаров много, такой процесс может занять определенное время. Фасета же заранее просчитывает и составляет варианты запросов, сохраняет в системе и выдает по запросу.
Одному каталогу соответствует один фасетный индекс. Он нужен для того, чтобы поиск по каталогу осуществлялся максимально быстро. После того, как вы внесли изменения в настройки умного фильтра, проверьте состояние фасетных индексов (особенно если заметили, что внесенные вами изменения не отобразились).
В административном разделе перейдите в Рабочий стол → Контент → Инфоблоки Фасетные индексы
Если состояние индекса «Работает» и горит зеленый индикатор, то все в порядке. Если же индикатор красный и появилась кнопка «Создать», то нажмите «гамбургер» и выберите соответствующий пункт.
В списке «Информационный блок» выберите «Каталог товаров». В поле «Шаг» можете оставить значение по умолчанию.
Вы можете при необходимости отключить фасетный индекс, но делать это не рекомендуется.