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

mSearch ​

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

Возможности ​

  • Морфологический анализ — поиск по словоформам с помощью библиотеки phpMorphy (русский, английский, немецкий, украинский языки)
  • Словарный индекс — быстрый поиск с настраиваемыми весами полей
  • Алиасы поиска — синонимы и замены для расширения результатов
  • Статистика запросов — отслеживание популярных запросов
  • Автоматическая индексация — при сохранении ресурсов
  • Отложенная индексация — фоновая индексация через Scheduler
  • Vue-интерфейс — современная админ-панель на Vue 3 + PrimeVue
  • Автодополнение — подсказки при вводе запроса
  • Публичный API — REST endpoint для AJAX-поиска и интеграций
  • Headless-режим — JavaScript API (window.msearch) для React/Vue/кастомных решений
  • Система хуков — расширение поведения поиска через msearchHooks
  • Мультиконтекст — фильтрация результатов по контекстам MODX

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

ТребованиеВерсия
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. Сгруппированы по областям Индексация, Поиск, Фронтенд.

Полное описание всех настроек с дефолтами и use-cases — на отдельной странице Системные настройки.

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

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

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

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

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

События ​

СобытиеОписание
mseOnRegisterAdaptersРегистрация адаптеров для индексации кастомных моделей
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')}

Поддержка ​