Битрикс: Исключить поиск по детальному описанию

Необходимо исключить детальное описание товара из поиска на сайте. Всё бы хорошо, но я не могу понять, почему как-то странно работает код. На просторах интернета я нашёл код, который размещаешь в init.php в директории /bitrix/php_interface и всё должно работать. Вот код:

AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields) {
    $arrIblock = array(25);
    $arDelFields = array("DETAIL_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;
    }
}

И вроде код работает, но не на всех товарах. На части товаров поиск действительно перестал искать по детальному описанию, но на некоторых до сих пор продолжает. Я подумал, что может это связанно с тем, что эти товары давно добавлены (контрольный товар, где поиск продолжает искать, добавлен более трёх лет назад, контрольный товар, где поиск перестал искать, добавлен в этом году) и уже настолько часто индексировались, что в истории поиска они глубоко засели. Но, даже если я добавлю какое-нибудь новое слово в детальное описание этих двух товаров, старый товар будет искаться, а новый нет. Очищение полностью кэша и полную переиндексацию я уже делал и не один десяток раз. Находил ещё такие варианты, но результаты всегда одни и те же:

AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields) {
    $arrIblock = array(25);
    $arDelFields = array("DETAIL_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){
                    $arElement[$value] = strip_tags($arElement[$value]);
                    $arElement[$value] = str_replace(array(' '), " ", $arElement[$value]);
                    $arElement[$value] = preg_replace('|[\s]+|s', ' ', $arElement[$value]);
                    $arFields["BODY"] = str_replace($arElement[$value], "", preg_replace('|[\s]+|s', ' ', $arFields["BODY"]));
                }
            }
        }
        return $arFields;
    }
}
AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields) {
    $arrIblock = array(25);
    $arDelFields = array("DETAIL_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 ($arElement[$value], "", $arFields["BODY"]);
                }
            }
        }
        return $arFields;
    }
}

Я тут выяснил, что если я присвою вот так

$arFields["BODY"] = "";

то поиск действительно не будет искать по детальному описанию. И вроде бы это хорошо, но он перестал искать и по краткому описанию, а по краткому описанию должен искать, я ведь исключаю только "DETAIL_TEXT". Сейчас актуальная версия у меня такая:

AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields) {
    $arrIblock = array(25);
    $arDelFields = array("DETAIL_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"] = "";
                }
            }
        }
        return $arFields;
    }
}

Ответы (0 шт):