
Обслуживание
Системные операции для поддержания производительности фильтров. Большинство задач выполняется автоматически — здесь они для ручного запуска и диагностики.
Структура вкладки
┌────────────────────────────────────────────────┐
│ Индекс фасетов [Активен] │
│ ┌──────────────────────────────────────┐ │
│ │ Денормализованный индекс значений │ │
│ │ фильтров. Заменяет тяжёлые JOIN'ы. │ │
│ │ │ │
│ │ 450 320 текстовых записей │ │
│ │ 12 845 числовых записей │ │
│ │ 10:32 последняя пересборка │ │
│ │ │ │
│ │ [Пересобрать сейчас] [Через Scheduler]│ │
│ └──────────────────────────────────────┘ │
│ │
│ Кэш данных фильтров [142 записей] │
│ ┌──────────────────────────────────────┐ │
│ │ Промежуточные результаты вычислений. │ │
│ │ Очищается автоматически. │ │
│ │ │ │
│ │ [Очистить кэш] │ │
│ └──────────────────────────────────────┘ │
│ │
│ ▶ Прогрев baseIds (устаревает) [Legacy] │
└────────────────────────────────────────────────┘Индекс фасетов
Главный блок вкладки. Денормализованный индекс значений фильтров (color, size, price, weight и т.п.) — заменяет JOIN'ы по таблицам товаров и опций при каждой фильтрации. Фильтры начинают работать в 5–10 раз быстрее на каталогах от 10 000 товаров.
Когда индекс обновляется автоматически
- При сохранении набора фильтров — пересобираются только изменённые ключи
- При upgrade пакета — задача
mfl_rebuild_facet_indexставится в очередь Scheduler - При нажатии кнопки «Переиндексация» в шапке админки
Когда нужна ручная пересборка
- После массового импорта товаров (ImportX, REST-импорт, прямой SQL)
- После прямых правок цен/опций в БД, минующих API MS3
- После изменения published / deleted статусов через bulk-операции
- При обнаружении расхождений между фильтрами и реальными товарами
Кнопки
| Кнопка | Когда использовать |
|---|---|
| Пересобрать сейчас | Маленький каталог (до 30k товаров) — займёт секунды |
| Через Scheduler | Большой каталог (50k+) или нет уверенности во времени выполнения. Появляется только если установлен Scheduler |
При выборе «Через Scheduler» сборка запускается на ближайшем тике cron — обычно в течение минуты. Параллельно сайт работает на fallback'е, простоев нет.
Статусы
| Статус | Что означает |
|---|---|
| Активен (зелёный) | Индекс построен и используется |
| В очереди Scheduler (синий) | Сборка запланирована, выполнится на ближайшем тике |
| Не построен (жёлтый) | Индекс пустой. Нажмите «Построить сейчас» — без него фильтры работают по старому медленному пути |
Метрики
| Метрика | Описание |
|---|---|
| Текстовых записей | Кол-во строк в mfl_facet_index_text (бренды, цвета, размеры) |
| Числовых записей | Кол-во строк в mfl_facet_index_num (price, weight) |
| Последняя пересборка | Дата и время последнего полного rebuild |
Кэш данных фильтров
Промежуточные результаты вычислений — suggestions, фильтрованные ID. Очищается автоматически при сохранении товара или конфигурации фильтров.
Очищать вручную нужно только при отладке расхождений данных. В нормальной работе кэш не трогают.
Прогрев baseIds (Legacy)
Старая система прогрева — заранее вычисляет набор ID товаров для страниц.
После стабилизации индекса фасетов будет упрощена или удалена. Сейчас ещё используется для AJAX-режима получения baseIds. Не отключайте, если не уверены.
Подробнее: Прогрев кэша.
Кнопка «Переиндексация» в шапке
Единая кнопка в правом верхнем углу админки запускает полную переиндексацию:
- Слаги (alias-ы значений фильтров)
- TV-индекс
- Индекс фасетов
Полезна после массовых изменений в каталоге.
Подсветка:
- Серая — индекс актуален, при необходимости можно перезапустить
- Жёлтая — индекс ещё не построен, нажмите для первой сборки
Если установлен Scheduler — сборка индекса фасетов уходит в фон. Без Scheduler — выполняется синхронно, нужно дождаться.
Диагностика
Индекс пустой / suggestion'ы возвращают 0
- Проверить статус индекса на вкладке Обслуживание
- Если «Не построен» — нажать «Построить сейчас»
- После сборки проверить количество записей — должно быть > 0
После импорта товары не появляются в фильтрах
Индекс не обновляется автоматически при прямых SQL-вставках. Нужна ручная пересборка через «Пересобрать сейчас».
Долгая сборка зависает
Если кнопка «Пересобрать сейчас» не возвращается на каталогах 100k+:
- Установите Scheduler
- Используйте кнопку «Через Scheduler» — сборка уйдёт в фон без HTTP-таймаута
Логи
Сборка пишет в лог MODX:
[mFilter] Facet index rebuild started
[mFilter] Facet index: indexed 145320 rows for 'color'
[mFilter] Facet index: indexed 87234 rows for 'size'
[mFilter] Facet index rebuild done: 8 filters, 450320 text rows, 12845 num rows, 8432msAPI статуса
GET /assets/components/mfilter/connector.php?action=maintenance/status (manager-only)
{
"facet_index": {
"is_built": true,
"is_pending": false,
"needs_attention": false,
"text_rows": 450320,
"num_rows": 12845,
"total_rows": 463165,
"last_built_at": 1730633520
},
"counts": {
"filter_sets": 3,
"slugs": 1450,
"word_forms": 87,
"warmup_configs": 2,
"cache_records": 142
},
"dependencies": {
"minishop3": true,
"msearch": false,
"scheduler": true
}
}Используется фронтом админки для отображения статус-бара. Можно использовать в кастомных интеграциях для мониторинга.
Системные таблицы
| Таблица | Назначение |
|---|---|
mfl_facet_index_text | Текстовые значения фильтров |
mfl_facet_index_num | Числовые значения фильтров |
mfl_request_runs / mfl_request_ids | Регистрация больших списков ID для JOIN |
mfl_cache | Кэш результатов фильтрации |
Подробнее о структуре: Модели и БД.
