Переиндексация сайта на 1с-Битрикс по расписанию

Здравствуйте дорогие читатели!

В сегодняшней статье речь пойдет о переиндексации сайта по расписанию.

Столкнулись с такой задачей: на сайте ежедневно происходит импорт товаров в формате CSV. В инфоблоке настроено всё правильно(флажок Индексировать элементы для модуля поиска— установлен). У товара имеется свойство артикул. Это свойство участвует в поиске. После импорта, поиск не может найти новые товары. Причина оказалась в том, что не переиндексировался поисковый индекс у товаров. Решение проблемы: Настройки > Поиск > Переиндексация ,  запустить переиндексацию , если вы загружаете базу в ручную и не часто. В моем случае данное решение не подходило, т.к. переиндесировать поиск вручную каждый день мне не представлялось интересным занятием. Реализация решения проблемы состояла из 2-ух этапов:

  1. Написать скрипт переиндексации;
  2. Настроить выполнение скрипта по расписанию.

Скрипт для переиндексации сайта.

Функция bitrix api для переиндексации сайта CSearch::ReIndexAll. Она принимает 4 параметра:

  1. Если равен true, то на первом шаге поисковый индекс будет полностью очищен. По умолчанию равен false, что приводит к перестройке индекса только тех элементов, содержимое которых изменилось.
  2. Если задан и больше нуля, то как только время выполнения функции превысит значение этого параметра, её выполнение завершится. Данные для начала следующего шага будут возвращены как результат работы функции.
  3. Хранит состояние процесса индексации (прогресс) на начало шага.
  4. Удаляет историю/статистику подсказок для строки поиска. Необязательный параметр, по умолчанию принимает значение false.

Подробнее тут.

У меня получился следующий код:

/**
 * Переиндексация поиска
 *
 * @return string
 */
function Reindex_Search()
{
    if (CModule::IncludeModule("search")) {
        $Result = false;
        $Result = CSearch::ReIndexAll(true, 60);
        while (is_array($Result)) {
            $Result = CSearch::ReIndexAll(true, 60, $Result);
        }
    }

    return "Reindex_Search();";
}
Скрипт для переиндексации сайта на 1с-Битрикс написан. Функцию добавим в файл /bitrix/php_interface/init.php. Переходим ко второму этапу.

Создаем агента для выполнения скрипта в CMS битрикс.

Переходим на страницу Настройки > Инструменты > Агенты по команде Добавить агента на контекстной панели. Подробнее про создание агента читайте тут.

поля агента битрикс
Заполненные поля

Поясню значения полей :

  • дата последнего запуска — если агент периодичный, то будет выведено время последнего запуска при его редактировании;
  • дата и время следующего запуска – время старта работы агента, если он не периодический то выполнится 1 раз в это время;
  • модуль — этот модуль будет автоматически подключаться, а именно будет подключаться файл /bitrix/modules/ID модуля/include.php, в этом случае необходимо убедиться, что функция-агент будет доступна после подключения этого файла; как вариант, я мог написать так:
reindex_search

предварительно добавив функцию, полученную на 1-ом этапе, в класс CSearchStatistic, который находится в файле /bitrix/modules/search/classes/general/statistic.php . Но лучше использовать вариант, который я описал выше, т.к. он более мобильный.

  • функция агента — это основное поле, имя функции, которую я написал в первом этапе это — Reindex_Search();
  • ID пользователя – это фильтр выполнения на хите для определенного пользователя;
  • Интервал я задал 86400 секунд, что есть 24 часа.

Переиндексация сайта на 1с-Битрикс по расписанию(каждый день) готова.

Читайте статью как обучиться битриксу .

Рекомендуем к прочтению



2 комментария

  • Инокентий:

    Есть такая проблемка у агентов в Битрикс, их запуск каждый раз смещается по времени, так что ваша переиндексация сайта будет на несколько минут смещаться с каждым запуском, так что нужно будет периодически калибровать запуск.
    Можно решить эту проблему. Запускать не агентом по расписанию, а средствами хостинга, с помощью cron. Тогда переиндексация сайта по расписанию будет запускаться без смещения т.е. , если укажете время запуска 7:35, cron будет запускать в 7:35 и спустя 5 лет))

  • Роман:

    у меня такая проблема. на сайте настроен скрипт импорта с внешним каталогом и при этом не отображались цены. выяснилось, что нужно сделать переиндексацию товров, т.к. не определялся тип товра. сделали, цены стали отображатся, но перестали обновлятся остатки из файла импорта. что подскажите? как решить проблему?

Оставить комментарий

Этот сайт защищен reCAPTCHA и применяются Политика конфиденциальности и Условия обслуживания применять.

Срок проверки reCAPTCHA истек. Перезагрузите страницу.