Исключение стандартных полей из поисковой индексации Битрикс

135 просмотров
Автор: Николай Ковалёв

По умолчанию, поиск в Битрикс осуществляется по всем текстовым полям элементов: название, текст анонса, детальное описание. Допустим, нужно, чтобы поиск работал только по названиям элементов, а текст анонса и детальное описание нужно исключить.

Для решения, переходим в файл bitrix/php_interface/init.php и вставляем следующий код:

AddEventHandler("search", "BeforeIndex", "IndexCustom");

function IndexCustom($arFields)
{
    $iblock = array(1); // 1 - ID инфоблока
    $unset_fields = array("DETAIL_TEXT", "PREVIEW_TEXT"); // поля которые нужно исключить

    if(\Bitrix\Main\Loader::includeModule("iblock") && $arFields["MODULE_ID"] == "iblock" && in_array($arFields["PARAM2"], $iblock) && intval($arFields["ITEM_ID"]) > 0)
    {
    	$db_res = CIblockElement::GetByID($arFields["ITEM_ID"]);
    	if($res = $db_res->Fetch())
    	{
        	foreach($unset_fields as $value)
        	{
        		if(isset($res[$value]) && strlen($res[$value]) > 0)
        		{
        			$arFields["BODY"] = str_replace(CSearch::KillTags($res[$value]), "", CSearch::KillTags($arFields["BODY"]));
        		}
        	}
    	}
    	return $arFields;
    }
}
Далее нужно сделать переиндексацию поиска. Заходим в Настройки, Поиск, Переиндексация, убираем галочку Переиндексировать только измененные и запускаем переиндексацию.
5.00 1 голос
Валюта цен: BYN RUB