Как в битриксе сделать автоматическую переиндексацию

Если вам надоело постоянно нажимать кнопку “переиндексация” в админке, вам поможет данный скрипт, который можно повесить на cron.

Переиндексация сайта в 1С-Битрикс

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

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

Создайте файл и добавьте следующий код:

ini_set('mbstring.func_overload', '2'); // для версий php < 5.3
ini_set('mbstring.internal_encoding', 'UTF-8');

set_time_limit(0);
ignore_user_abort(true);

$_SERVER['DOCUMENT_ROOT'] = '/var/www';

define('NO_KEEP_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS',true);
define('BX_CRONTAB', true);
define('BX_NO_ACCELERATOR_RESET', true);
define('SITE_ID', 's1');
define('LANG', 'ru');

require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php');

if (!CModule::IncludeModule('search')) {
   die('Search module not included');
}

$time_start = time();

$progress = array();
$max_execution_time = 10000; // все элементы индексируются только при большом шаге

while (is_array($progress)) {
   $progress = CSearch::ReIndexAll(true, $max_execution_time, $progress);
}

$total_time = time() - $time_start;

echo 'reindex finished. total time: ' . $total_time . ' seconds, indexed elements: ' . $progress . "\r\n";

Важно! Обратите внимание на DOCUMENT_ROOT. Его нужно изменить. После чего, создайте задачу выполнять переиндексацию раз в сутки. Также, необходимо убедится, что скрипт дорабатывает до конца.

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

В версиях php > 5.3 нет возможности менять параметр mbstring.func_overload через ini_set(), поэтому пришлось ставить ее в настройках сервера. Но это уже вторично.

Чтобы повесить на крон вводим в консоле:

crontab -e

Команда откроет файл crontab для редактирования. И туда нужно добавить строчку примерно такого характера:

0 */24 * * * /usr/bin/php -f /var/www/search_reindex.php >/var/www/search_reindex.log

Это значит запускать файл search_reindex.php каждые 24 часа, результат записывать в файл search_reindex.log.
Абсолютные пути и названия файлов, естественно, прописываете свои.

UPDATE:
Еще один способ, состоит из 2 шагов.
Шаг 1. Помещаем скрипт для переиндексации в init.php:

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();";
 
}

Шаг 2. Создаем агента для выполнения скрипта в CMS 1С-Битрикс:
Переходим на страницу Настройки > Инструменты > Агенты по команде Добавить агента на контекстной панели.

Самое важное добавить функция агента — это основное поле, имя функции, которую я написал в первом этапе это — Reindex_Search();

Функцию обязательно записывать в файл init.php, тогда корректная работа скрипта обеспечена.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

4 коментаря

Залишити відповідь