[spoiler]
Сначала знакомимся с
А вот и ответ:
//bitrix/php_interface/init.php // Настраиваем выполнение агентов в соответствии с // http://www.1c-bitrix.ru/blog/oracle/215.php // Ставим функцию AddSearchReIndexAgent() суточным периодическим агентом. // выполнить строчку приведенную ниже в окне /bitrix/admin/php_command_line.php?lang=ru // CAgent::AddAgent("AddSearchReIndexAgent();", "search", "Y"); function AddSearchReIndexAgent() { //Первый шаг $NS = array(); $NS = serialize($NS); //Сохраняем в файл $fp = fopen("/tmp/search_reindex.data", "w"); fwrite($fp, $NS); fclose($fp); //Создаем агента для запуска в cron'е CAgent::AddAgent("SearchReIndexAgent();", "search", "N", 0); //На следующий день повторим. return "AddSearchReIndexAgent();"; } function SearchReIndexAgent() { //Надо require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/admin_tools.php"); //Читаем шаг $fp = fopen("/tmp/search_reindex.data", "rb"); $NS = fread($fp, filesize("/tmp/search_reindex.data")); fclose($fp); $NS = unserialize($NS); //Выполняем его $NS = CSearch::ReIndexAll(false, 55, $NS); //Проверим, нужен еще шаг или нет? if(is_array($NS)) { $NS = serialize($NS); //Сохраняем в файл $fp = fopen("/tmp/search_reindex.data", "w"); fwrite($fp, $NS); fclose($fp); //Запустимся еще раз return "SearchReIndexAgent();"; } else { //На сегодня хватит! return ""; } } |
Ну а периодичность запуска cron'а чуть больше второго параметра ReIndexAll.
Т.е. в нашем случае (55) - смело ставим 1 раз в минуту.
В некоем скрипте у меня по велению некого алгоритма периодически меняются активный и неактивный инфоблоки. И, как оказалось, при деактивации элементы удаляются из поискового индекса, а при активации - назад в него не возвращаются.
Вот и стала актуальным ваш пост.