Настройка полнотекстового поиска 1С-Битрикс
Поиск по сайту в Битрикс работает через модуль search. При первоначальной настройке поиск либо не находит ничего (индекс не построен), либо находит всё подряд включая служебные страницы, либо работает медленно на больших объёмах контента.
Как устроен поиск в Битрикс
Модуль search строит полнотекстовый индекс в таблицах:
-
b_search_content— проиндексированный контент (заголовки, теги, тело) -
b_search_content_stem— стем-индекс (корни слов для морфологии) -
b_search_tag— теги для поиска
Индексация происходит автоматически при сохранении элементов (инфоблоков, страниц) через обработчик события OnSearchIndex. Принудительная переиндексация — через административный раздел или агент.
Настройка источников поиска
Настройки → Поиск → Настройки модуля:
- Сохранять историю поиска — полезно для аналитики
- Морфология — включить для поиска по словоформам («купить», «купил», «покупка»)
- Символы в индексе — минимальная длина слова для индексации (рекомендуется 3)
Настройка индексируемых источников (Настройки → Поиск → Переиндексация):
- Выбрать инфоблоки для индексации
- Указать, какие свойства индексировать
- Исключить технические страницы и служебный контент
Компонент поиска
$APPLICATION->IncludeComponent('bitrix:search.page', '', [
'SITE_ID' => 's1',
'SEARCH_CACHE_TIME' => 3600,
'DEFAULT_WORD' => '',
'MINIMAL_QUERY_LEN' => 3,
'USE_SUGGEST' => 'Y', // подсказки при вводе
'arrFILTER' => [ // источники для поиска
['MODULE_ID' => 'iblock', 'PARAM1' => 'catalog', 'PARAM2' => 5],
['MODULE_ID' => 'iblock', 'PARAM1' => 'content'],
],
]);
Морфология и релевантность
Битрикс использует встроенный стемминг для русского языка. При включённой морфологии запрос «красные платья» найдёт «красное платье» и «красный платья». Морфологический индекс строится в b_search_content_stem.
Релевантность результатов управляется весами:
- Слово в заголовке — высокий вес
- Слово в теле — средний вес
- Слово в теге — средний вес
Настройки весов: b_search_content.PARAM1 хранит дополнительные параметры источника.
Переиндексация и производительность
При большом каталоге (50 000+ товаров) полная переиндексация занимает значительное время. Решение:
- Использовать инкрементальную индексацию (только изменённые элементы)
- Разбить переиндексацию на порции через агент
- Для высоконагруженных проектов — перейти на внешнее решение (Elasticsearch + кастомный модуль)
Мониторинг состояния индекса:
$rsSearch = CSearch::GetList('s1', ['SITE_ID' => 's1'], false, ['nTopCount' => 1]);
// Дата последнего обновления индекса
Сроки выполнения
Базовая настройка поиска с индексацией каталога и контента — 2–4 часа. Тонкая настройка морфологии, весов и исключений — 4–8 часов. Интеграция с Elasticsearch — 2–5 дней.







