new

mSearch

Полнотекстовый поиск с морфологическим анализом для MODX Revolution 3.x.
Автор дополнения
Николай Савин
Пакетов
20
Закачек
32 679
Обычно отвечает в течение суток
Автор дополнения
Пакетов
20
Закачек
32 679
Обычно отвечает в течение суток
Версия 1.3.2-beta
Дата выпуска 31.05.2026
Загрузки 69
Просмотры 1 106
Внимание, этот компонент требует PHP 8.1 или выше!
Внимание, этот компонент требует MODX 3 или выше.
Возможности

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

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

  • MODX Revolution | 3.0.0+
  • PHP | 8.1+
  • MySQL | 5.7+ / MariaDB 10.3+

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

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

  • MODX был 2.x стал 3.x
  • PHP был 5.6+ стал 8.1+
  • Интерфейс был ExtJS стал Vue 3 + PrimeVue
  • Архитектура был Процедурный стал Service-based
  • Фильтрация был mFilter2 будет отдельный пакет
  • phpMorphy был Встроенный стал Composer-пакет `cijic/phpmorphy`
  • Scheduler планировщик не было совсем появилась возможность запланированной переиндексации

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

[1.3.1-beta]

Added

  • Свойство &classKey=` у сниппета `mSearchForm — список class_key через запятую для ограничения поиска одним или несколькими классами ресурсов. Например, &classKey=`MiniShop3\Model\msProduct` оставит в выдаче только товары; &classKey=`MiniShop3\Model\msProduct,Tickets\Model\TicketComment` — только товары и комментарии. Фильтр применяется на SQL-уровне (AND class_key IN (...)) в mse_words и mse_intro, поэтому веса и LIKE-fallback считаются уже по сокращённому набору. По умолчанию параметр пустой — фильтр не добавляется, поиск идёт по всем классам.
  • Searcher::search() принимает опцию class_keys (строка или массив). Доступно и для прямых PHP-вызовов.

Changed

  • MsProductAdapter::enrich() совместим с новым контрактом miniShop3 (PR #269). После этого PR сниппет msProducts возвращает price/old_price всегда как float независимо от formatPrices, а форматированную строку с валютой выкладывает в отдельные поля price_formatted/old_price_formatted. Адаптер теперь предпочитает price_formatted для price_display, если оно есть, иначе делает number_format на сырое число. Поведение остаётся совместимым со старой miniShop3 (до PR #269) — там старая логика «строка как есть» работает через fallback.

Fixed

  • SearchController::chunkExists() ошибочно блокировал binding-префиксы (@FILE, @INLINE, @CHUNK) в значении свойства &tpl=` сниппета `mSearchForm. Защита была заложена в более ранней архитектуре, где tpl мог приходить напрямую из клиентского запроса. Сейчас tpl хранится в кэше MODX по formId и записывается только сниппетом со страницы — это доверенный источник, поэтому ограничение лишнее. После фикса работают конструкции вида &tpl='@FILE chunks/search/suggest.tpl' — pdoTools прочитает чанк прямо с диска. Симптом до фикса: в логах [mSearch] Refusing chunk name with binding prefix: @FILE ..., подсказки автокомплита не отображаются.

Последние обсуждения в сообществе MODX.pro