Документация для разработчиков
Темная тема

ReIndexAll

Описание и параметры

mixed
CSearch::ReIndexAll( bool bFull = false, int max_execution_time = 0, array NS = Array(), bool clear_suggest = false );

Метод пошаговой переиндексации. Для того, чтобы модуль был переиндексирован, он должен предоставить соответствующий метод, который должен быть зарегистрирован в системе событий как обработчик события OnReIndex модуля "search". Метод статический.

На завершение работы метода срабатывает или время или "шаг", смотря что раньше "закончится".

Примечание: метод использует внутреннюю транзакцию. Если у вас используется MySQL и InnoDB, и ранее была открыта транзакция, то ее необходимо закрыть до подключения метода.

Параметры метода

Параметр Описание С версии
bFull Если равен true, то на первом шаге поисковый индекс будет полностью очищен. По умолчанию равен false, что приводит к перестройке индекса только тех элементов, содержимое которых изменилось.
max_execution_time Если задан и больше нуля, то как только время выполнения метода превысит значение этого параметра выполнение метода завершится. Данные для начала следующего шага будут возвращены как результат работы метода. 3.0.6
NS Хранит состояние процесса индексации (прогресс) на начало шага. 3.0.6
clear_suggest Удаляет историю/статистику подсказок для строки поиска. Необязательный параметр, по умолчанию принимает значение false. 8.6.3

Возвращаемое значение

Метод возвращает массив, если требуется вызвать метод еще раз. Или число проиндексированных элементов, если переиндексация завершена.

Смотрите также

Примеры использования

<?
//Этот пример не является примером пошаговой индексации.
//Для этого надо вызывать метод ReIndexAll только один раз за запуск скрипта.
//А промежуточное состояние (NS) можно сохранять например в файле.

$NS = false;
$NS = CSearch::ReIndexAll(false, 60, $NS);
while(is_array($NS))
$NS = CSearch::ReIndexAll(false, 60, $NS);
echo $NS;

?>


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Валерий Чебан
Сообщение не промодерировано, возможны ошибки и неточности.
Если планируете использовать этот метод в консоли - то учтите, что им не будут все инфоблоки проиндексированы.

Вот почему:
см. \CIBlock::OnSearchReindex();
https://disk.yandex.ru/i/4C0HOyxJFoUzDg

для индексации всех инфоблоков можно использовать что-то такое:

Код
$time_start         = time();
$progress           = [];
$max_execution_time = 0;

while (is_array($progress)) {
   $progress = CSearch::ReIndexAll(true, $max_execution_time, $progress);
   \Bitrix\Main\Diag\Debug::dump($progress);
}

// limit 1000 see \CIBlock::OnSearchReindex();
// https://disk.yandex.ru/i/4C0HOyxJFoUzDg

$rs = CIBlockElement::GetList(['ID' => 'DESC'], [], false, false, ['ID', 'IBLOCK_ID']);
while ($ar = $rs->Fetch()) {
   CIBlockElement::UpdateSearch($ar['ID'], true);
}

$total_time = time() - $time_start;

echo 'reindex finished. total time: ' . $total_time . ' seconds, indexed elements: ' . $progress;
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх