Например: У вас очень большой каталог товаров, у каждого товара заполнено детальное описание, с большими объемами текста. При попытке поиска по каталогу, стандартным компонентом "Поиск по каталогу", есть вероятность, что начнут выдаваться не релевантные запросу результаты. Так как будет осуществлена попытка полнотекстового поиска по всему содержимому.
Добавляем обработчик BeforeIndex В директории /local/ создаем директорию php_interface и в ней файл init.php, в котором и описываем функцию-обработчик. Данная функция сработает при попытке переиндексации элементов модулем поиска и исключит описания анонсов и детальные описания из индекса.
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler"); function BeforeIndexHandler($arFields) { $arrIblock = array(8); $arDelFields = array( "DETAIL_TEXT", "PREVIEW_TEXT" ); if ( CModule::IncludeModule('iblock') && $arFields["MODULE_ID"] == 'iblock' && in_array($arFields["PARAM2"], $arrIblock) && intval($arFields["ITEM_ID"]) > 0 ) { $dbElement = CIblockElement::GetByID($arFields["ITEM_ID"]); if ($arElement = $dbElement->Fetch()) { foreach ($arDelFields as $value) { if (isset ($arElement[$value]) && strlen($arElement[$value]) > 0) { $arFields["BODY"] = str_replace(CSearch::KillTags($arElement[$value]), "", CSearch::KillTags($arFields["BODY"])); } } } return $arFields; } }
Где:
$arrIblock = array(8); - индетификатор инфоблока каталога
$arDelFields = array("DETAIL_TEXT", "PREVIEW_TEXT") ; - поля которые исключаем из индекса.