Назад

Как в bitrix:search.page ограничить по заголовкам

Главная
Блог
Как в bitrix:search.page ограничить по заголовкам

При работе с поиском на Bitrix часто возникает необходимость ограничить область поиска только заголовками страниц или элементов инфоблоков. Это особенно актуально для больших сайтов, где поиск по полному содержимому может давать избыточные или нерелевантные результаты.

Метод 1: Модификация поискового индекса через BeforeIndex

Самый радикальный, но эффективный способ — изменить сам поисковый индекс, оставив в теле индекса только заголовки.

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

function BeforeIndexHandler($arFields)
{
    $arFields["BODY"] = $arFields["TITLE"];
    return $arFields;
}

Плюсы:

  • Максимальная производительность поиска

  • Не требует дополнительной обработки при поисковых запросах

Минусы:

  • Требует полной переиндексации (Админка → Сервис → Поиск → Переиндексация)

  • Полностью исключает контент страниц из поиска

Метод 2: Фильтрация результатов через OnSearchGetURL

Более гибкий способ — фильтровать результаты поиска уже после выполнения запроса.

AddEventHandler("search", "OnSearchGetURL", "OnSearchGetURLHandler");

function OnSearchGetURLHandler($url, $arr)
{
    $searchQuery = $_GET['q'] ?? '';
    if(!empty($searchQuery) && stripos($arr['TITLE'], $searchQuery) === false) {
        return false; // Исключаем из результатов
    }
    return $url;
}

Плюсы:

  • Не требует переиндексации

  • Позволяет комбинировать поиск по заголовкам и контенту

Минусы:

  • Медленнее первого метода

  • Фильтрация происходит после выполнения поискового запроса

Метод 3: Модификация поискового запроса через OnSearchGetData

Самый правильный с архитектурной точки зрения способ — изменить сам поисковый запрос.

AddEventHandler("search", "OnSearchGetData", "OnSearchGetDataHandler");

function OnSearchGetDataHandler($arParams)
{
    if(!empty($_GET['q'])) {
        $arParams['QUERY'] = 'TITLE:"'.$_GET['q'].'"';
    }
    return $arParams;
}

Плюсы:

  • Наиболее корректная работа поиска

  • Поддерживает синтаксис поисковых запросов Bitrix

Минусы:

  • Требует точного соответствия (можно использовать TITLE:%поисковый запрос%)

Дополнительные настройки

  1. Настройка весов полей (для модуля поиска):

    • Админка → Настройки → Поиск → Правила сортировки

    • Установите вес для поля TITLE в максимальное значение

  2. Для компонента bitrix:search.page добавьте параметр:

    'USE_LANGUAGE_GUESS' => 'N',
    'CHECK_DATES' => 'N',

  3. Для инфоблоков используйте фильтр:

    'FILTER_NAME' => 'arrFilter',

    С определением фильтра:

    $arrFilter = ['%NAME' => $_GET['q']];

Заключение

Выбор метода зависит от ваших требований:

  • Для максимальной производительности — первый метод

  • Для гибкости — второй метод

  • Для точности — третий метод

Не забудьте после внедрения изменений провести тестирование поиска и при необходимости выполнить переиндексацию.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи