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

На днях, работая над новым проектом, я столкнулся с очередной особенностью Битрикс Управление Сайтом.
Дело в том, что в стандартный поиск по каталогу товаров без особых усилий можно добавить собственные свойства, но вот возможности исключить из поисковой индексации стандартные поля в системе почему-то не предусмотрено.

Сегодня расскажу способе решения данной задачи и для чего это нужно в практическом плане.

Зачем нужно исключать стандартные поля из индексации

Все просто. Представьте себе, что в вашем каталоге 1 000+ наименований товаров. У каждого есть подробное, развернутое описание. В результате скорее всего вы заметите, что поисковая выдача становится не совсем релевантной. Дело в том, что штатно БУС осуществляет полнотекстовый поиск по всему содержимому, а именно: название, анонс, детальное описание. Никаких опций для исключения стандартных полей из участия в поиске, как я уже говорил, не предусмотрено. Но нам требуется, чтобы поиск осуществлялся только по наименованию.

В решении данной задачи нам поможет событие BeforeIndex. Код, приведенный ниже, размещаем в файле php_interface/init.php. Скорее всего он уже существует на вашем сайте, если нет, то его потребуется добавить. А вот и сам код:

AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
	function BeforeIndexHandler($arFields) {
	/*вместо 000 укажите индетификатор инфоблока каталога*/
	    $arrIblock = array(000);
	/*исключаем детальное описание и анонс*/
	    $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;
	    }
	}

Далее переходим к переиндексации поиска: /bitrix/admin/search_reindex.php?lang=ru, обязательно снимаем чекбокс «Переиндексировать только измененные» и запускаем переиндексацию. После завершения процедуры, переходим в публичную часть сайта и проверяем.

Больше информации о способах оптимизации и улучшения стандартного механизма поиска от БУС ищите здесь.

Опубликовано: 22 февраля 2018 года, в рубрике «Битрикс».

Оставить комментарий

5000
  Подписаться  
Уведомление о
Поблагодарить автора статьи
Зачем это нужно