Настройка поиска
В некоторых сценариях нам требуется кастомизировать поведение поиска, например:
- Обрабатывать поисковые запросы (например, удалять запрещённые слова).
- Фильтровать результаты встроенного полнотекстового поиска.
- Отправлять отчёты о введённых поисковых запросах.
- Подменять источник поисковых данных, например искать в базе данных.
- Кастомно рендерить результаты из собственного источника.
- …и многое другое.
Для всех этих гибких задач мы предоставляем специальные интерфейсы (хуки), которые позволяют расширять компоненты поиска из стандартной темы — это делает кастомизацию поиска простой и удобной.
Знакомство с searchHooks
В конфигурации Rspress предусмотрен параметр search.searchHooks, с помощью которого можно задать хуки для компонентов поиска. Выглядит это так:
Значение параметра search.searchHooks — это путь к файлу. В этом файле должны экспортироваться нужные хуки (например, onSearch), которые реализуют вашу логику кастомизации поиска во время выполнения. Такой файл мы будем называть модулем searchHooks.
Функции-хуки в searchHooks
Далее разберём доступные хуки: beforeSearch, onSearch, afterRender и render.
В модуле searchHooks достаточно экспортировать только те хуки, которые вам действительно нужны — экспортировать все сразу не требуется.
beforeSearch
Хук beforeSearch выполняется до начала поиска. Его удобно использовать для предварительной обработки поискового запроса, например, удаления запрещённых слов или отправки отчёта о введённом запросе.
Хук поддерживает асинхронные операции.
Пример использования:
onSearch
Хук onSearch вызывается после завершения стандартной логики полнотекстового поиска. В нём вы можете отфильтровать или отправить отчёт о результатах поиска, а также добавить собственный источник поисковых данных.
Хук поддерживает асинхронные операции.
Пример использования:
Обратите внимание: возвращаемое значение хука onSearch — это массив. Каждый элемент массива представляет результат от отдельного источника поиска и имеет следующую структуру:
Поле result — это сами результаты поиска, вы можете задавать для него любую удобную вам внутреннюю структуру. Поле renderType определяет тип результата и может принимать значения RenderType.Default или RenderType.Custom:
RenderType.Default— будет использована стандартная логика отрисовки результатов поиска;RenderType.Custom— результат будет отрисован с помощью функцииrender, которую вы предоставите.
afterSearch
Хук afterSearch вызывается после того, как результаты поиска уже отрендерены. Здесь вы можете получить окончательный поисковый запрос и окончательные результаты поиска.
Хук поддерживает асинхронные операции.
Пример использования:
render
Функция render отвечает за отрисовку данных из пользовательского источника поиска, который вы добавили в хуке onSearch. Поэтому её обычно используют вместе с onSearch. Пример использования:
Вот как выглядит результат:


