Skip to content
mSearch
mSearch
Полнотекстовый поиск с морфологическим анализом для MODX 3
  1. Компоненты
  2. mSearch

mSearch

Полнотекстовый поиск с морфологическим анализом для MODX Revolution 3.x.

Возможности

  • Морфологический анализ — поиск по словоформам с помощью библиотеки phpMorphy (русский, английский, немецкий, украинский языки)
  • Словарный индекс — быстрый поиск с настраиваемыми весами полей
  • Алиасы поиска — синонимы и замены для расширения результатов
  • Статистика запросов — отслеживание популярных запросов
  • Автоматическая индексация — при сохранении ресурсов
  • Отложенная индексация — фоновая индексация через Scheduler
  • Vue-интерфейс — современная админ-панель на Vue 3 + PrimeVue
  • Автодополнение — подсказки при вводе запроса

Системные требования

ТребованиеВерсия
MODX Revolution3.0.0+
PHP8.1+
MySQL5.7+ / MariaDB 10.3+

Зависимости

  • pdoTools 3.x — для работы сниппетов и шаблонизатора Fenom
  • VueTools — для административного интерфейса
  • Scheduler (опционально) — для отложенной индексации

Установка

Через менеджер пакетов

  1. Перейдите в Extras → Installer
  2. Нажмите Download Extras
  3. Найдите mSearch в списке
  4. Нажмите Download и затем Install

После установки:

  1. Перейдите в Extras → mSearch → Словари
  2. Скачайте морфологический словарь для нужного языка (русский, английский, немецкий, украинский)
  3. Перейдите на вкладку Индексация и создайте поисковый индекс

Быстрый старт

1. Создайте страницу поиска

Создайте ресурс для вывода результатов поиска, например /search/.

2. Добавьте форму и результаты

fenom
{'!mSearchForm' | snippet : [
    'pageId' => 5,
    'autocomplete' => 1
]}

{'!mSearch' | snippet : [
    'tpl' => 'mSearch.row',
    'limit' => 10
]}

3. Настройте индексацию

Укажите в системных настройках поля для индексации:

mse_index_fields = pagetitle:3,longtitle:2,description:2,introtext:2,content:1

Числа — это веса полей. Чем больше вес, тем выше будут результаты с совпадениями в этом поле.

Системные настройки

Все настройки имеют префикс mse_ и находятся в пространстве имён msearch.

Индексация

НастройкаПо умолчаниюОписание
mse_index_fieldspagetitle:3,longtitle:2,description:2,introtext:2,content:1Поля для индексации с весами
mse_index_min_word_length3Минимальная длина слова для индексации
mse_index_split_words#\s|[,.:;!?"'«»„"()\[\]{}<>]#uРегулярное выражение для разделения текста на слова
mse_use_schedulerfalseИспользовать Scheduler для отложенной индексации

Поиск

НастройкаПо умолчаниюОписание
mse_search_exact_match_bonus10Бонус за точное совпадение запроса в тексте
mse_search_like_match_bonus3Бонус за LIKE-совпадение
mse_search_all_words_bonus5Бонус если все слова запроса найдены
mse_search_split_words#\s+#uРегулярное выражение для разделения запроса

Фронтенд

НастройкаПо умолчаниюОписание
mse_frontend_css[[++assets_url]]components/msearch/css/web/msearch.cssURL CSS файла
mse_frontend_js[[++assets_url]]components/msearch/js/web/msearch.jsURL JS файла

Плейсхолдеры

После выполнения поиска доступны плейсхолдеры:

ПлейсхолдерОписание
[[+mse.total]]Общее количество найденных результатов
[[+mse.query]]Обработанный поисковый запрос

В чанке результата (tpl):

ПлейсхолдерОписание
[[+weight]]Вес (релевантность) результата
[[+intro]]Текст с подсвеченными совпадениями
[[+idx]]Порядковый номер результата

События

СобытиеОписание
mseOnBeforeIndexПеред индексацией ресурса
mseOnGetWorkFieldsИзменение списка полей для индексации
mseOnAfterIndexПосле индексации ресурса
mseOnBeforeSearchПеред выполнением поиска
mseOnAfterSearchПосле выполнения поиска

Отличия от mSearch2

mSearch — это полностью переписанный компонент для MODX 3.x:

АспектmSearch2mSearch
MODX2.x3.x
PHP5.6+8.1+
ИнтерфейсExtJSVue 3 + PrimeVue
АрхитектураПроцедурныйService-based
АлиасыСинонимыАлиасы (синонимы + замены)
ФильтрацияmFilter2Нет (используйте pdoTools)
phpMorphyВстроенныйComposer-пакет cijic/phpmorphy
Источник словарейSourceForgeGitHub
Эстонский языкДаНет
SchedulerНетДа (отложенная индексация)

mFilter2

Сниппет mFilter2 не входит в mSearch. Для фильтрации используйте стандартные возможности pdoTools или сторонние решения.

Примеры

Базовый поиск

fenom
<form action="{'search' | url}" method="get">
    <input type="text" name="mse_query" value="{$_GET['mse_query']}" placeholder="Поиск...">
    <button type="submit">Найти</button>
</form>

{'!mSearch' | snippet : [
    'tpl' => 'mSearch.row',
    'limit' => 10
]}

С пагинацией

fenom
{'!mSearchForm' | snippet : ['pageId' => $_modx->resource.id]}

{'!pdoPage' | snippet : [
    'element' => 'mSearch',
    'tpl' => 'mSearch.row',
    'limit' => 10
]}

{$_modx->getPlaceholder('page.nav')}

Поиск товаров MiniShop3

fenom
{'!pdoPage' | snippet : [
    'element' => 'msProducts',
    'parents' => 0,
    'resources' => '!mSearch' | snippet : ['return' => 'ids', 'limit' => 0] | default : '999999',
    'sortby' => 'ids'
]}

{$_modx->getPlaceholder('page.nav')}

Поддержка