[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 раз в минуту.
В некоем скрипте у меня по велению некого алгоритма периодически меняются активный и неактивный инфоблоки. И, как оказалось, при деактивации элементы удаляются из поискового индекса, а при активации - назад в него не возвращаются.
Вот и стала актуальным ваш пост.
$_SERVER["DOCUMENT_ROOT"] = '/home/bitrix/www'; $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; 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"); @set_time_limit(0); @ignore_user_abort(true); CModule::IncludeModule("search") $res = CSearch::ReIndexAll(); echo 'Проиндексировано элементов: ', $res;