
Индексация
Вкладка для создания и управления поисковым индексом.
Назначение
Построение индекса — ресурсоёмкая операция, поэтому она выполняется порциями через Ajax-запросы. На этой вкладке вы можете создать индекс, отслеживать прогресс и очистить его при необходимости.
Интерфейс
Статистика
| Показатель | Описание |
|---|---|
| Всего ресурсов | Общее количество ресурсов в системе |
| Проиндексировано | Количество ресурсов в индексе |
| Слов в индексе | Общее количество слов |
Элементы управления
| Элемент | Описание |
|---|---|
| Порция | Количество ресурсов, обрабатываемых за один запрос (1-500) |
| Создать индекс | Запустить индексацию |
| Очистить индекс | Удалить все записи из индекса |
Прогресс-бар
Во время индексации отображается прогресс выполнения в процентах.
Как работает индексация
- Извлечение данных — из БД загружаются поля ресурса согласно настройке
mse_index_fields - Разбиение на слова — текст разбивается по регулярному выражению из
mse_index_split_words - Фильтрация — отбрасываются слова короче
mse_index_min_word_lengthсимволов - Морфологический анализ — для каждого слова генерируются базовые формы через phpMorphy
- Сохранение — слова с весами записываются в таблицу индекса
Системные настройки
| Настройка | По умолчанию | Описание |
|---|---|---|
mse_index_fields | pagetitle:3,longtitle:2,description:2,introtext:2,content:1 | Поля для индексации с весами |
mse_index_min_word_length | 3 | Минимальная длина слова |
mse_index_split_words | #\s|[,.:;!?"'«»„"()\[\]{}<>]#u | Регулярное выражение для разделения |
mse_use_scheduler | false | Использовать 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. Это позволяет индексировать ресурсы в фоновом режиме, не замедляя сохранение документов.
Включение
- Установите компонент 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 автоматически переключается на прямую индексацию.
События
При индексации вызываются события, которые можно использовать для расширения функциональности:
| Событие | Описание |
|---|---|
mseOnBeforeIndex | Перед индексацией ресурса. Можно добавить дополнительные поля. |
mseOnGetWorkFields | Изменение списка полей для индексации |
mseOnAfterIndex | После индексации ресурса |
Пример: добавление произвольных слов
<?php
switch ($modx->event->name) {
case 'mseOnBeforeIndex':
// Добавляем кастомное поле с весом 1
$msearch->fields['custom_field'] = 1;
$resource->set('custom_field', 'Дополнительные ключевые слова');
break;
}Пример: индексация опций товаров MiniShop3
<?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;
}