Приветствую всех.
Передо мной стоит задача организовать регулярную переиндексацию сайта, которая должна выполняться в фоновом режиме, когда-нибудь ночью.
Пошарил в гугле, нашел примеры и документацию, набросал вот такой скрипт:
Скрипт тестировался из командной строки, т.е. проблем с time_limit'ами вроде быть не должно.
Теперь о проблемах.
Проблема №1. После переиндексации этим скриптом поиск перестает нормально работать. На запрос вида "электрочайник" выдается пустой результат, хотя в каталоге этих электрочайников вагон. При этом, если переиндексировать сайт через админку, с теми же настройками, то поиск прекрасно находит эти самые электрочайники.
Проблема №2. Если верить , то установка шага ($max_execution_time) в ноль заставляет функцию ReIndexAll проиндексировать все элементы за один шаг. При этом индексируется 1885 документов. Но если поставить ненулевой шаг (например 60 или 10000), то индексируется 3867 документов. Нахожу этот момент довольно странным.
Далее, при установленном ненулевом шаге происходит следующее: если все делается через админку, то процесс длится минуты 3, и поиск работает отлично. Если же индексация делается скриптом из консоли, то процесс занимает около 15 минут, и поиск ищет очень плохо.
Буду очень рад, если кто-нибудь объяснит мне возможные причины такого поведения и укажет на мои ошибки.
Спасибо.
Передо мной стоит задача организовать регулярную переиндексацию сайта, которая должна выполняться в фоновом режиме, когда-нибудь ночью.
Пошарил в гугле, нашел примеры и документацию, набросал вот такой скрипт:
| Код |
|---|
<?
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);
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 = 0;
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;
?>
|
Теперь о проблемах.
Проблема №1. После переиндексации этим скриптом поиск перестает нормально работать. На запрос вида "электрочайник" выдается пустой результат, хотя в каталоге этих электрочайников вагон. При этом, если переиндексировать сайт через админку, с теми же настройками, то поиск прекрасно находит эти самые электрочайники.
Проблема №2. Если верить , то установка шага ($max_execution_time) в ноль заставляет функцию ReIndexAll проиндексировать все элементы за один шаг. При этом индексируется 1885 документов. Но если поставить ненулевой шаг (например 60 или 10000), то индексируется 3867 документов. Нахожу этот момент довольно странным.
Далее, при установленном ненулевом шаге происходит следующее: если все делается через админку, то процесс длится минуты 3, и поиск работает отлично. Если же индексация делается скриптом из консоли, то процесс занимает около 15 минут, и поиск ищет очень плохо.
Буду очень рад, если кто-нибудь объяснит мне возможные причины такого поведения и укажет на мои ошибки.
Спасибо.
Идея по
