
Индексация
Вкладка для создания и управления поисковым индексом.
Назначение
Построение индекса — ресурсоёмкая операция, поэтому она выполняется порциями через Ajax-запросы. На этой вкладке вы можете создать индекс, отслеживать прогресс и очистить его при необходимости.
Интерфейс
Статистика
| Показатель | Описание |
|---|---|
| Всего ресурсов | Общее количество ресурсов в системе |
| Проиндексировано | Количество ресурсов в индексе |
| Слов в индексе | Общее количество слов |
Элементы управления
| Элемент | Описание |
|---|---|
| Порция | Количество ресурсов, обрабатываемых за один запрос (1-500) |
| Создать индекс | Запустить индексацию |
| Очистить индекс | Удалить все записи из индекса |
Прогресс-бар
Во время индексации отображается прогресс выполнения в процентах.
Как работает индексация
- Извлечение данных — из БД загружаются поля ресурса согласно настройке
mse_index_fields - Разбиение на слова — текст разбивается по регулярному выражению из
mse_index_split_words - Фильтрация — отбрасываются слова короче
mse_index_min_word_lengthсимволов - Морфологический анализ — для каждого слова генерируются базовые формы через phpMorphy
- Сохранение — слова с весами записываются в таблицу индекса
Системные настройки
Связанные настройки находятся в области Индексация — см. полное описание на странице Системные настройки.
Настройка весов полей
Параметр mse_index_fields определяет ценность слов в разных полях. Формат:
поле1:вес1,поле2:вес2,...Чем выше вес, тем выше будут результаты с совпадениями в этом поле.
Примеры конфигурации
Стандартная:
pagetitle:3,longtitle:2,description:2,introtext:2,content:1С TV-параметрами:
pagetitle:3,content:1,tv_subtitle:2,tv_keywords:3Для товаров MiniShop3:
pagetitle:3,description:2,content:1,article:5,vendor_name:2Когда нужно переиндексировать
Индекс обновляется автоматически при сохранении ресурсов. Полная переиндексация требуется:
- При первой установке компонента
- После изменения системных настроек индексации
- После массового импорта контента
Рекомендации
| Порция | Применение |
|---|---|
| 50 | Стандартное значение для большинства серверов |
| 10-20 | Для слабых серверов или больших документов |
| 100+ | Для мощных серверов с быстрым хостингом |
Оптимальное значение
Если при индексации возникают ошибки timeout, уменьшите размер порции.
Интеграция со Scheduler
mSearch поддерживает отложенную индексацию через компонент Scheduler. Это позволяет индексировать ресурсы в фоновом режиме, не замедляя сохранение документов.
Включение
- Установите компонент Scheduler
- Включите системную настройку
mse_use_scheduler
Как это работает
При сохранении ресурса:
| Без Scheduler | Со Scheduler |
|---|---|
| Индексация выполняется сразу | Создаётся задача в очереди |
| Замедляет сохранение | Сохранение мгновенное |
| Блокирует интерфейс | Индексация в фоне |
Задача mse_index_resource
Задача регистрируется автоматически при установке mSearch (если Scheduler уже установлен).
Параметры:
| Параметр | Описание |
|---|---|
resource_id | ID ресурса для индексации |
| (без параметров) | Полная переиндексация всех ресурсов |
Ручной запуск полной индексации
Вы можете запустить полную переиндексацию через Scheduler:
- Перейдите в Extras → Scheduler
- Найдите задачу
mse_index_resource(namespace:msearch) - Запустите задачу без параметров
Регулярная переиндексация
Через Scheduler можно настроить периодическую переиндексацию, например, раз в неделю.
Логирование
Задача записывает прогресс в лог MODX:
[mSearch indexResource task] Starting full reindex...
[mSearch indexResource task] Progress: 100/500 (indexed: 100)
[mSearch indexResource task] Progress: 200/500 (indexed: 200)
...
[mSearch indexResource task] Full reindex completed. Total indexed: 500Fallback при отсутствии Scheduler
Если Scheduler не установлен или задача не найдена, mSearch автоматически переключается на прямую индексацию.
События
При индексации вызываются события — их полное описание см. на странице Плагин и события.
Пример: добавление поля с условием
Через mseOnGetWorkFields можно модифицировать список индексируемых полей на лету — например, для конкретного типа ресурса повысить вес pagetitle или подключить TV-поля:
<?php
/** @var array $fields by reference */
$fields = &$scriptProperties['fields'];
/** @var modResource $resource */
$resource = $scriptProperties['resource'];
if ($resource->get('class_key') === \MyApp\Model\News::class) {
$fields['pagetitle'] = 5;
$fields['tv_tags'] = 3;
}Пример: индексация опций товаров MiniShop3 через свой адаптер
Для индексации связанных данных кастомных моделей правильный путь — собственный адаптер, реализующий ContentAdapterInterface. Сам адаптер регистрируется через событие mseOnRegisterAdapters:
<?php
// Плагин на событие mseOnRegisterAdapters
/** @var MSearch\Services\Indexer\IndexerInterface $indexer */
$indexer = $scriptProperties['indexer'];
$indexer->addAdapter(new \MyApp\Adapters\MsProductWithOptionsAdapter(
$modx,
$modx->services->get('msearch')
));Адаптер сам решает, какие поля включить в индекс через getIndexableFields() и как извлечь их содержимое из объекта через extractContent(). Подробнее — см. Расширение компонента.
