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

Индексация

Вкладка для создания и управления поисковым индексом.

Назначение

Построение индекса — ресурсоёмкая операция, поэтому она выполняется порциями через Ajax-запросы. На этой вкладке вы можете создать индекс, отслеживать прогресс и очистить его при необходимости.

Интерфейс

Статистика

ПоказательОписание
Всего ресурсовОбщее количество ресурсов в системе
ПроиндексированоКоличество ресурсов в индексе
Слов в индексеОбщее количество слов

Элементы управления

ЭлементОписание
ПорцияКоличество ресурсов, обрабатываемых за один запрос (1-500)
Создать индексЗапустить индексацию
Очистить индексУдалить все записи из индекса

Прогресс-бар

Во время индексации отображается прогресс выполнения в процентах.

Как работает индексация

  1. Извлечение данных — из БД загружаются поля ресурса согласно настройке mse_index_fields
  2. Разбиение на слова — текст разбивается по регулярному выражению из mse_index_split_words
  3. Фильтрация — отбрасываются слова короче mse_index_min_word_length символов
  4. Морфологический анализ — для каждого слова генерируются базовые формы через phpMorphy
  5. Сохранение — слова с весами записываются в таблицу индекса

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

НастройкаПо умолчаниюОписание
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_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. Это позволяет индексировать ресурсы в фоновом режиме, не замедляя сохранение документов.

Включение

  1. Установите компонент Scheduler
  2. Включите системную настройку mse_use_scheduler

Как это работает

При сохранении ресурса:

Без SchedulerСо Scheduler
Индексация выполняется сразуСоздаётся задача в очереди
Замедляет сохранениеСохранение мгновенное
Блокирует интерфейсИндексация в фоне

Задача mse_index_resource

Задача регистрируется автоматически при установке mSearch (если Scheduler уже установлен).

Параметры:

ПараметрОписание
resource_idID ресурса для индексации
(без параметров)Полная переиндексация всех ресурсов

Ручной запуск полной индексации

Вы можете запустить полную переиндексацию через Scheduler:

  1. Перейдите в Extras → Scheduler
  2. Найдите задачу mse_index_resource (namespace: msearch)
  3. Запустите задачу без параметров

Регулярная переиндексация

Через 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: 500

Fallback при отсутствии Scheduler

Если Scheduler не установлен или задача не найдена, mSearch автоматически переключается на прямую индексацию.

События

При индексации вызываются события, которые можно использовать для расширения функциональности:

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

Пример: добавление произвольных слов

php
<?php
switch ($modx->event->name) {
    case 'mseOnBeforeIndex':
        // Добавляем кастомное поле с весом 1
        $msearch->fields['custom_field'] = 1;
        $resource->set('custom_field', 'Дополнительные ключевые слова');
        break;
}

Пример: индексация опций товаров MiniShop3

php
<?php
switch ($modx->event->name) {
    case 'mseOnBeforeIndex':
        if ($resource->get('class_key') !== 'msProduct') {
            return;
        }

        // Получаем опции товара
        $options = $modx->getCollection('msProductOption', [
            'product_id' => $resource->get('id'),
        ]);

        foreach ($options as $option) {
            $key = 'option_' . $option->get('key');
            $msearch->fields[$key] = 1;
            $resource->set($key, $option->get('value'));
        }
        break;
}