Skip to content
mSearch
mSearch
Полнотекстовый поиск с морфологическим анализом для MODX 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')}

Поддержка