Неожиданные ограничения Smart Filter в UMI.CMS и их причины

Сегодня я бы хотел немного поговорить о смарт фильтрах, которые появились в Юми относительно недавно. Основная их задача — помогать разработчикам, но в некоторых случаях это далеко не так.

Для начала несколько слов о том, что же такое smart filter. Коротко: это механизм, позволяющий фильтровать товары с невиданной до этого момента в Юми быстротой. Достигается это за счёт предварительного индексирования фильтруемых разделов.

Но в некоторых случаях, в результате попытки проиндексировать раздел, вы получите ошибку вида:

Невозможно создать индекс. Укажите другие параметры индексации.

Обычно такое происходит в том случае, если вы пытаетесь индексировать разделы уровнем повыше. Например, верхний уровень каталога.

Когда возникает эта проблема?

С подобными трудностями вы можете столкнуться в тот момент, когда суммарное количество полей для фильтрации превышает 64 штуки.

К сожалению, никаких явных путей узнать об этом просто не существует. На практике, я лично просто нашёл выдаваемую ошибку в коде, посмотрел что её вызывает и зафиксировал суммарно 83 поля вместо 64.

В чем причина этой проблемы?

Смарт-фильтр в UMI устроен так, что для каждого индексирования создаёт отдельную таблицу. В ней столбцы — это индексируемые поля. И для всех столбцов без исключения строится отдельный индекс.

В MySQL есть ограничение на количество индексов для одной таблицы. И оно равно 64. Именно поэтому, когда у вас больше 64 полей фильтрации, система не может создать в таблице более чем 64 индекса, и не проводит индексацию вообще.

Как бороться с этой проблемой?

Самое очевидное — уменьшить количество полей фильтрации.

Это можно сделать либо взяв для индексации каталог уровнем пониже, либо сняв галочки "фильтруемое" у некоторых полей.

В частности, точно нужно убрать галочки у полей с типами "простой текст" и "html", так как, даже попав в фильтрацию, они не подлежат индексации внутри БД.

К сожалению, на текущий момент других механизмов обхода данного ограничения попросту нет. Однако, разработчики UMI.CMS в курсе данной проблемы и, надеюсь, в ближайшее время они смогут помочь нам её преодолеть.

Безусловно, нам ещё многое предстоит узнать о новом механизме фильтрации и, вероятно, многое еще нас удивит. Чтож, поживем — увидим…

Простой и понятный online-курс для обучения XSLT-программиста с любого базового уровня

Ваш отзыв