Как пересоздать фасетный индекс, если много товаров
В данной статье пойдет речь как создавать фасетный индекс, если товаров очень много. Ну прям настолько много, что переиндексация через админку занимает много времени. Сидеть и ждать с открытым браузером неудобно, а если у вас еще и обмен с 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. Проверка системы
- Как снять бекап базы в Битрикс?
- Подробная статья про функции отладки кода в Битрикс
- Аудит сайта на Битрикс. Часть 1. Зачем нужен аудит сайта?
Серия Market 2.0.
Фасетный индекс необходим для ускорения поиска товаров и работы всего каталога.
Перед его созданием необходимо проверить чтобы в умном фильтре отображалось не менее одного свойства каталога товаров.
Для создания фасетного индекса перейдите в административную панель и пройдите по следующему пути:
Контент-Инфоблок-Фасетные индексы-Создать все
- Информационный блок (укажите конкретный каталог товаров)
- Шаг ( задайте интервал одного шага создания индекса в секундах, можно использовать значение по умолчанию)
Создание индексов занимает продолжительное время, поэтому рекомендуется проводить индексацию в период минимальной нагрузки на сервер.
Созданные фасетные индексы хранятся в базе данных.
2. Заполнение полей
- Информационный блок (укажите конкретный каталог товаров)
- Шаг ( задайте интервал одного шага создания индекса в секундах, можно использовать значение по умолчанию)
Создание индексов занимает продолжительное время, поэтому рекомендуется проводить индексацию в период минимальной нагрузки на сервер.
Созданные фасетные индексы хранятся в базе данных.

Эта инструкция оказалась полезна?
Почему поиск по каталогу не находит товары?
1. Часто такая проблема связана с отсутствием фасетного индекса для каталога.
Чтобы его создать, нужно перейти в Контент > Инфоблоки > Фасетные индексы, выбрать нужный каталог и следовать по шагам программы.

В поле «информационный блок» будет находиться каталог, для которого вы создаёте индекс.

2. Другая причина связана, как раз наоборот с тем что фасетный индекс создан. Однако если одновременно используется фасетный индекс и фильтр в поиске, то результат может быть пустым пока не применится хотя бы один из фильтров. Эта проблема исправлена в актуальной версии решения, однако если вы не обновляли шаблон то можно исправить следующим образом — перейдите в папку bitrix/templates/universe_s1/components/bitrix/catalog/catalog.1/bitrix/catalog.search/.default/ откройте файл template.php. В нем добавьте строчку
$arElements[‘PARAMETERS’][‘SHOW_ALL_WO_SECTION’] = «N»;
в месте показанном на скриншоте ниже

Обратите внимание! Хоть это и простое действие, но манипуляции с кодом требуют определенных технических знаний. Если вы не являетесь техническим специалистом, лучше не выполняйте эту рекомендацию, а обратитесь в нашу техническую поддержку, наш специалист вам поможет.

3. Проверьте в параметрах компонента каталога привязку инфоблока. Бывает так, что сам инфоблок выбран правильно, а тип инфоблока нет
Номер инфоблока должен быть выбран в верхнем поле. В таком случае измените тип инфоблока на нужный
Фасетные индексы
Страница Фасетные индексы инфоблоков (Контент > Инфоблоки > Фасетные индексы) служит для создания фасетных индексов для инфоблоков, являющимися торговыми каталогами.
Важно! Создание фасетных индексов доступно только для тех каталогов, в которых есть хотя бы одно отображаемое свойство в умном фильтре.
Контекстная панель
Контекстная панель отображается только при наличии торговых каталогов, для которых необходимо создать фасетные индексы.
| Кнопка | Описание |
|---|---|
| Создать все | Переход к форме создания фасетных индексов. Кнопка не отображается, если для всех торговых каталогов фасетные индексы созданы и их пересоздание не требуется. |
| Настроить | Позволяет перейти к диалогу настройки внешнего вида отчетной формы. |
| Excel | Экспортирует данные из отображаемой таблицы в MS Excel. |
Список инфоблоков
- Создать — переход к форме создания фасетных индексов.
Смотрите также
Новинки документации в соцсетях:
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Юрий Гранд 30.03.2020 14:40:00
Для переиндексации элемента можно использовать метод:
\Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex($IBLOCK_ID,$PRODUCT_ID);
Владислав Морсин 17.04.2015 21:38:47
Для удаления фасетного индекса инфоблока надо выполнить:
CModule::IncludeModule('iblock'); Bitrix\Iblock\PropertyIndex\Manager::DeleteIndex($iblockId); Bitrix\Iblock\PropertyIndex\Manager::markAsInvalid($iblockId);
***********
От разработчика:
| Цитата |
|---|
| Вместо DeleteIndex (в этом случае) лучше использовать dropIfExists. |
