
Системные настройки
Все настройки компонента находятся в пространстве имён msearch и имеют префикс mse_. В админке они сгруппированы по трём областям: Индексация, Поиск, Фронтенд.
Индексация (mse_index)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
mse_index_fields | textfield | pagetitle:3,longtitle:2,description:2,introtext:2,content:1 | Поля modResource для индексации с весами. Используется ResourceAdapter::getIndexableFields() |
mse_index_fields_product | textfield | pagetitle:3,longtitle:2,description:2,introtext:2,article:3 | Поля для индексации товаров msProduct (miniShop3). Используется MsProductAdapter::getIndexableFields(). Поддерживает article из msProductData |
mse_index_min_word_length | numberfield | 3 | Минимальная длина слова для индексации. Слова короче — игнорируются. Используется в Indexer::extractWords() и Searcher::splitQuery() |
mse_index_split_words | textfield | #\s|[,.:;!?"'«»„"()\[\]{}<>]#u | Регулярное выражение для разбиения текста на слова при индексации |
mse_use_scheduler | combo-boolean | 0 | Использовать MODX Scheduler для отложенной фоновой индексации при сохранении ресурсов. Требует установленного компонента Scheduler |
Формат mse_index_fields / mse_index_fields_product
Список полей через запятую, каждое поле — имя:вес:
pagetitle:3,longtitle:2,description:2,introtext:2,content:1Вес влияет на ранжирование результатов: совпадение в поле с весом 3 даёт в 3 раза больший вклад в score, чем совпадение в поле с весом 1.
Поддерживаются:
- Обычные поля
modResource(pagetitle,longtitle,description,introtext,content,aliasи т.д.). - TV-поля с префиксом
tv_илиtv.(например,tv_color:2илиtv.tags:1). - Для
mse_index_fields_product— поляmsProductData(например,article).
Кэширование адаптеров
Изменение настройки требует переиндексации — старые записи в индексе сформированы по предыдущему списку полей.
Поиск (mse_search)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
mse_search_split_words | textfield | #\s+#u | Регулярное выражение для разбиения поискового запроса на слова. Обычно проще, чем при индексации (только пробелы) |
mse_search_exact_match_bonus | numberfield | 10 | Дополнительный вес результата, если в mse_intro найдено точное вхождение всего запроса целиком |
mse_search_like_match_bonus | numberfield | 3 | Дополнительный вес для результатов, найденных только через LIKE-fallback (когда слов нет в индексе) |
mse_search_all_words_bonus | numberfield | 5 | Дополнительный вес, если в документе найдены все слова запроса (а не только часть) |
mse_suggest_min_query_length | numberfield | 2 | Минимальная длина запроса для срабатывания автодополнения. Запросы короче — /search/suggest отвечает {"items": []} без обращения к индексу. Нижний порог — 1: значение 0 трактуется как 1, на пустой запрос подсказки не выдаются |
Как работают бонусы
Базовый score результата — сумма (weight_поля × count_совпадений) по всем найденным словам. Бонусы добавляются сверху:
| Сценарий | Прибавка к score |
|---|---|
| Точное вхождение полной фразы | +exact_match_bonus |
| Все слова запроса найдены в документе | +all_words_bonus |
| Документ найден только LIKE-поиском (нет в индексе) | +like_match_bonus |
Увеличивая exact_match_bonus и all_words_bonus, вы повышаете «качественные» результаты над частичными совпадениями. Уменьшая like_match_bonus — снижаете влияние LIKE-результатов на топ выдачи.
Фронтенд (mse_frontend)
| Ключ | Тип | По умолчанию | Описание |
|---|---|---|---|
mse_frontend_css | textfield | [[++assets_url]]components/msearch/css/web/msearch.css | URL CSS-файла, который регистрирует mSearchForm. Пустое значение — CSS не подключается |
mse_frontend_js | textfield | [[++assets_url]]components/msearch/js/web/msearch.js | Зарезервировано; в текущей реализации mSearchForm использует жёстко прописанный layered-стек из 6 файлов (см. ниже). Настройка не подключается автоматически |
Замена CSS
Для замены стилей — скопируйте файл в свою тему и укажите путь:
mse_frontend_css = [[++assets_url]]templates/mytheme/css/my-msearch.cssЗамечание о mse_frontend_js
Настройка унаследована от mSearch2, где весь JS был одним файлом. После перехода на многослойную архитектуру (1.2.0+) сниппет mSearchForm регистрирует шесть отдельных файлов жёстким кодом. Настроить JS-стек через эту настройку нельзя.
Возможные пути расширения JS-поведения без изменения стека:
- Подписаться на хуки
msearchHooksв своём<script>после загрузки наших файлов (см. JavaScript API). - Установить свой плагин и зарегистрировать дополнительные скрипты через
OnWebPagePrerender.
Реабилитация настройки запланирована — см. issue #6.
Опциональные настройки (не регистрируются автоматически)
Эти настройки читаются кодом, но не создаются при установке пакета. При необходимости создайте их вручную через System Settings → New Setting в админке.
mse_cors_origin
| Тип | По умолчанию | Где читается |
|---|---|---|
| textfield | '' (пусто) | assets/components/msearch/api.php |
Управляет CORS-политикой публичного API (api.php):
- Пустое значение (default) — разрешены только same-origin запросы. Это безопасный режим для типичного сайта.
- Конкретный origin (например,
https://my-spa.example.com) — добавляется заголовокAccess-Control-Allow-Origin: <значение>, разрешая cross-origin запросы только из указанного источника.
Используется при интеграции mSearch с отдельным SPA-фронтендом на другом домене.
Cookies при cross-origin
Конфигурация автодополнения (tpl, limit, element и т.д.) хранится в кэше MODX под formId, а не в куках, поэтому проблем с withCredentials обычно не возникает. Но если SPA-клиент не вызывает сниппет mSearchForm для регистрации конфига — он работает в headless-режиме со значениями по умолчанию. См. Сниппет mSearchForm → Headless-режим.
