Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Отключить поиск по описаниям товаров в Битрикс

Просмотров: 10620

Иногда, нужно отключить поиск по описаниям анонсов и детальному описанию товаров, при разработке сайтов на Битрикс. Сделать это можно, воспользовавшись событием "BeforeIndex" который вызывается перед индексацией элемента методом CSearch::Index.

Для чего отключать поиск по описаниям товаров в Битрикс

Например: У вас очень большой каталог товаров, у каждого товара заполнено детальное описание, с большими объемами текста. При попытке поиска по каталогу, стандартным компонентом "Поиск по каталогу", есть вероятность, что начнут выдаваться не релевантные запросу результаты. Так как будет осуществлена попытка полнотекстового поиска по всему содержимому

Добавляем обработчик BeforeIndex

В директории /local/ создаем директорию php_interface и в ней файл init.php, в котором и описываем функцию-обработчик. Данная функция сработает при попытке переиндексации элементов модулем поиска и исключит описания анонсов и детальные описания из индекса.

AddEventHandler("search", "BeforeIndex", "BeforeIndexHandler");
function BeforeIndexHandler($arFields)
{
    $arrIblock = array(48);
    $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(48); - индетификатор инфоблока каталога
$arDelFields = array("DETAIL_TEXT", "PREVIEW_TEXT") ; - поля которые исключаем из индекса

Инна Жилкина 31.08.2017
Спасибо огромное! Это как раз то, что надо!
mt subscribe 24.10.2017
не работает
Михаил Базаров 25.10.2017
Цитата
mt subscribe пишет:
не работает
Что-то делаете не правильно
mtsub 29.10.2017
http://prntscr.com/h3gn9x - в init.php добавил код, http://prntscr.com/h3go80 - сделал переиндексацию. Где ошибка? Не работает - выдает найденное в описании.
Юра Иов 23.01.2018
Добрый день! Пытаюсь использовать ваше решение, но положительного результата не добился.
Если вставляю код в файл, который находится в local , то сайт ложится
Если в файл, который находится в bitrix, то после переиндексации поиска нету никаких изменений на странице результатов поиска... могли бы подсказать в чем может быть дело?  
Кирилл Шелег 04.04.2018
У меня заработало... тут ID инфоблока надо прописать
+ я продублировал тот же код в папке  bitrix php_interface init.php
Кирилл Шелег 13.08.2018
К сожалению через пару месяцев данный скрипт перестал работать. Основные изменения на сайте в это время:перенос на VPS настройка агентов на cron ну и так по мелочи.... не знаю из за чего данный скрипт перестал работать....
Полазив по форумам удалось найти вот такой скрипт


AddEventHandler("search", "BeforeIndex", array("SearchHandlers", "BeforeIndexHandler"));

class SearchHandlers
{
  function BeforeIndexHandler($arFields)
  {
     if($arFields["MODULE_ID"] == "iblock")
     {
        if(array_key_exists("BODY", $arFields) && substr($arFields["ITEM_ID"], 0, 1) != "S") // Только для элементов
        {
           $arFields["BODY"] = "";
        }

        if (substr($arFields["ITEM_ID"], 0, 1) == "S") // Только для разделов
        {
           $arFields['TITLE'] = "";
           $arFields["BODY"] = "";
           $arFields['TAGS'] = "";
        }
     }

     return $arFields;
  }
}

Установил его в  bitrix php_interface init.php и все заработало
Николай Сухих 16.11.2018
Проверено, работает!
Не совсем только понятно почему
Код
// $arFields["BODY"] = str_replace (CSearch::KillTags($arElement[$value]) , "", CSearch::KillTags($arFields["BODY"]) );
// а не  
$arFields["BODY"] = "";
Боимся покалечить индекс который хотим удалить?
Николай Сухих 16.11.2018
Цитата
Николай Сухих пишет:
Проверено, работает!
Не совсем только понятно почему
Код
 // $arFields["BODY"] = str_replace (CSearch::KillTags($arElement[$value]) , "", CSearch::KillTags($arFields["BODY"]) );
// а не  
$arFields["BODY"] = ""; 
Боимся покалечить индекс который хотим удалить?
Сам отвечу: Боимся удалить из индекса свойства :)
p.s. Спасибо за статью.
Андрей 15.07.2022
Все работает, нужно сделать полную переиндексацию (cнять галочку "Переиндексировать только измененные"). Ну и если есть свой модуль, то в него запихнуть, а не в init.php

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс Просмотров: 24666 При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывае... Перенос Битрикс сайта с хостинга на хостинг, инструкция Просмотров: 26023 Достаточно часто спрашивают как перенести сайт работающий на 1С Битрикс с одного хостинга ... Установка Битрикс24 "Интернет-Магазин + CRM" на один домен и настройк... Просмотров: 894 Задача: установить лицензию "Интернет-Магазин + CRM" на один домен. Что бы crm была доступ... Картинка торгового предложения вместо иконки цвета, в выборе SKU Просмотров: 270 Задача: вместо не информативных иконок цветов нужно вывести детальную картинку торгового п... Если предложение SKU в корзине, поменять кнопку добавления на "В корз... Просмотров: 3121 Данная заметка является дополнением к ранее опубликованной: Есл... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 28482 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Автоматически отгрузить заказ и сменить статус отгрузки, при выполнен... Просмотров: 337 Проблема: Заказы, на сайте, обрабатываются только в 1С. При этом 1С не работает с отгрузка... Заполнение габаритов товара, после обмена с 1С, из свойств элемента и... Просмотров: 10422 Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 17735 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Звездочки в рейтинге Битрикс статей и новостей Просмотров: 18072 Стандартный вид рейтинга в новостях Битрикс, ну скажем так- не очень красив. Давайте его п... Если товар в корзине, поменять значение input на "В корзине" Просмотров: 10240 Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользо... Прятать или показывать описание раздела каталога Просмотров: 598 В новых компонентах и шаблонах catalog.section есть не документированный и не выводимый па... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 16864 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит... Добавить свойство в административную форму заказа Просмотров: 2809 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Заполнить свойство инфоблока ценой из торгового каталога Просмотров: 4584 Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. ... AJAX корзина с отправкой количества из раздела каталога Просмотров: 19124 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Адаптивное гамбургер меню для битрикс Просмотров: 14441 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 105492 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Сниппеты типографики bootstrap, для Битрикс Просмотров: 7600 Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstra... Если папка то применяем...в Битрикс Просмотров: 29222 Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для ди...