Неожиданные ограничения Smart Filter в UMI.CMS и их причины
Рубрика: Тонкости UMI CMS
Сегодня я бы хотел немного поговорить о смарт фильтрах, которые появились в Юми относительно недавно. Основная их задача — помогать разработчикам, но в некоторых случаях это далеко не так.
Для начала несколько слов о том, что же такое smart filter. Коротко: это механизм, позволяющий фильтровать товары с невиданной до этого момента в Юми быстротой. Достигается это за счёт предварительного индексирования фильтруемых разделов.
Но в некоторых случаях, в результате попытки проиндексировать раздел, вы получите ошибку вида:
Невозможно создать индекс. Укажите другие параметры индексации.
Обычно такое происходит в том случае, если вы пытаетесь индексировать разделы уровнем повыше. Например, верхний уровень каталога.
Когда возникает эта проблема?
С подобными трудностями вы можете столкнуться в тот момент, когда суммарное количество полей для фильтрации превышает 64 штуки.
К сожалению, никаких явных путей узнать об этом просто не существует. На практике, я лично просто нашёл выдаваемую ошибку в коде, посмотрел что её вызывает и зафиксировал суммарно 83 поля вместо 64.
В чем причина этой проблемы?
Смарт-фильтр в UMI устроен так, что для каждого индексирования создаёт отдельную таблицу. В ней столбцы — это индексируемые поля. И для всех столбцов без исключения строится отдельный индекс.
В MySQL есть ограничение на количество индексов для одной таблицы. И оно равно 64. Именно поэтому, когда у вас больше 64 полей фильтрации, система не может создать в таблице более чем 64 индекса, и не проводит индексацию вообще.
Как бороться с этой проблемой?
Самое очевидное — уменьшить количество полей фильтрации.
Это можно сделать либо взяв для индексации каталог уровнем пониже, либо сняв галочки "фильтруемое" у некоторых полей.
В частности, точно нужно убрать галочки у полей с типами "простой текст" и "html", так как, даже попав в фильтрацию, они не подлежат индексации внутри БД.
К сожалению, на текущий момент других механизмов обхода данного ограничения попросту нет. Однако, разработчики UMI.CMS в курсе данной проблемы и, надеюсь, в ближайшее время они смогут помочь нам её преодолеть.
Безусловно, нам ещё многое предстоит узнать о новом механизме фильтрации и, вероятно, многое еще нас удивит. Чтож, поживем — увидим…
Май11