Немного теории
Поисковая система
Стандартный модуль “Поиск” (search) организует индексацию содержимого всех остальных модулей и предоставляет компоненты и API для осуществления поисковых запросов внутри сайта с учетом прав и морфологии, собирает статистику поиска и дает инструмент управления ранжированием результатов поиска.
При настройке поиска первый шаг — определение индексной базы, всего того, что теоретически может появиться в результатах поисковой выдачи сайта. Обычно это все статические php-страницы сайта и некоторые инфоблоки. Если требуется, чтобы элементы или разделы определенного инфоблока встречались в поиске, нужно установить флаги “Индексировать разделы для модуля поиска” и “Индексировать элементы для модуля поиска” в настройках этого инфоблока
Чтобы добавить в поисковый индекс значение свойства, нужно установить флаг “Значения свойства участвуют в поиске” при настройке этого свойства
Фактически схема работы модуля “Поиск” при индексации выглядит так:
- Модуль “Поиск” опрашивает остальные модули, какие сущности они предоставят для индексации.
- На этом шаге модуль “Информационные блоки”, например, сообщает, что у него есть разделы и элементы.
- Модуль “Поиск” запрашивает все записи определенной сущности в специальном формате:
- ID модуля.
- ID индексируемой записи (ITEM_ID).
- URL для отображения этой записи.
- Заголовок записи (TITLE).
- Тело записи (BODY).
- Тэги записи.
- Дополнительные служебные параметры.
- Записи помещаются в БД в таблицы модуля “Поиск” и подготавливаются к поиску.
ID индексируемой записи — строковое поле. Он не обязан точно соответствовать внутреннему ID. Например, при индексации раздела с ID=42 поле ITEM_ID будет “S42”. ITEM_ID со значением “42” соответствует элементу инфоблока с ID=42.
URL для отображения инфоблоков берется из настроек самого инфоблока. Это одно из объяснений, зачем дважды прописывать пути к инфоблоку (сначала в настройках, потом в компоненте).
Заголовок записи (TITLE) ограничен по длине и используется в компоненте bitrix:search.title с упрощенным алгоритмом поиска.
В поле “Описание записи” (BODY) попадают PREVIEW_TEXT, DETAIL_TEXT и текстовые значения всех свойств с флагом “Значения свойства участвуют в поиске”, по которым позже проводится поиск в компоненте bitrix:search.page.
Поисковый индекс хранится в таблицах модуля “Поиск” и может быть изменен несколькими способами:
- Полная переиндексация проекта. Тяжелая операция, которую не надо делать под нагрузкой.
- Точечная переиндексация записей. Например, при редактировании или удалении элемента инфоблока запись о его поисковом индексе также будет изменена или удалена.
На поисковый индекс можно повлиять через механизм обработчиков событий, о котором мы поговорим в одном из следующих уроков.
Морфология
Поисковая система платформы позволяет находить записи из индексной базы не только при полном совпадении слов с запросом, она учитывает различные формы. Важно понимать, как это работает.
Текст поисковой записи разбивается на слова, из слов выделяются основы. Для выделения основ используются математические алгоритмы, а не стороннее ПО или технологии AI.
Разберем пример из документации, текст “Зебры любят зебр, а не слонов!”. Игнорируются короткие слова “а”, “не”, вся пунктуация. Текст приводится к верхнему регистру. Получается массив уникальных слов “ЗЕБРЫ ЛЮБЯТ ЗЕБР СЛОНОВ”. Текст разбивается по пробельным символам и функция стемминга рассчитывает основы слов.
- Для слов “ЗЕБРЫ” и “ЗЕБРА” основа (стем) один: “ЗЕБР”.
- Для слова “ЛЮБЯТ” — “ЛЮБ”.
- А для “СЛОНОВ” алгоритм вычисляет две вероятных основы: “СЛОН” и “СЛОНОВ”.
В таблицы модуля “Поиск” будут сохранены основы “ЗЕБР, ЛЮБ, СЛОН, СЛОНОВ”.
Аналогичный разбор будет произведен с поисковым запросом от пользователя. Анализ совпадения стемов в запросе и индексной базе и даст результат запроса. Чем ближе поисковый запрос к поисковому тексту, тем выше будет результат в выдаче.
Компоненты поиска
Модуль предоставляет 2 компонента для выполнения поисковых запросов:
- Поиск по заголовкам (bitrix:search.title).
- Стандартная страница поиска (bitrix:search.page).
Поиск по заголовкам работает без перезагрузки страницы, проверяет только TITLE поисковых записей. Пользователь не может поделиться ссылкой на результаты поиска, они отображаются во всплывающей подсказке под полем ввода поискового запроса. Обычно размещается в шапке сайта (файл header.php шаблона сайта).
Компонент “Стандартная страница поиска” размещается в отдельном разделе. У этого компонента другой алгоритм работы, более точный и, следовательно, медленный. Поэтому поисковая выдача этих двух компонентов будет разной. Пользователь может поделиться результатом поискового запроса или сохранить себе его в закладки, так как страница с результатом имеет уникальный URL. Также поддерживается поиск по тегам.
В обоих компонентах можно ограничить область поиска и искать не по всем проиндексированным модулям. В редакции “Стандарт” можно выбрать модули:
- main (Статические файлы);
- forum (Форум);
- blog (Блог);
- iblock (Информационные блоки).
Компонент "Форма поиска" (bitrix:search.form) не является полноценной формой, он лишь перенаправляет введенный в поле запрос на страницу с компонентом bitrix:search.page.
Практика
В «1С-Битрикс: Управление сайтом» существует 2 компонента для поиска в шапке сайта: bitrix:search.form и bitrix:search.title.
bitrix:search.form представляет из себя поисковую строку с переходом на страницу поиска. bitrix:search.title в дополнения к возможностям 1-го компонента добавляет подсказки при вводе запроса. Мы будем использовать bitrix:search.title
В этом видео:
- Разместим компонент bitrix:search.title в шаблоне сайта.
- Настроим его для двух разных шаблонов, обычной и мобильной версии.
- Подключим компонент для отображения результатов поиска.
Поиск
4 мин
Полезные ссылки и материалы