Алгоритм работы поиска товаров по тегам
Какой самый разумный алгоритм поиска и сортировки товаров по тегам?
У нас есть категории товаров в магазине, к примеру в виде дерева:
Техника
--- Мобильные телефоны
--- Ноутбуки
--- ...
--- Смарт-часы
Сами категории хранятся в базе данных.
Не самое разумное решение в каждой категории создавать суб-категории:
"телефоны - андроид"
"телефоны - андроид - 2 ГБ ОЗУ"
"телефоны - андроид - 3 ГБ ОЗУ"
и так далее...
Логичнее под товар создать свои теги. Какой должна быть реализация тегов? Смотрел реализацию в других движках и проектах, многие используют текстовое поле и теги через запятую, а после осуществляют множественный поиск, что не является лучшей идеей, если эти теги необходимо выводить и как то сортировать по ним товары.
В голову приходит только следующая мысль:
Таблица с самими тегами, которая включает в себя ID тега, его названием и возможно другие данные (к примеру ID категории для которой применим данный тег).
Таблица с товаром, в которой для конкретной задачи необходим ID товара.
Таблица, записи которой содержат ID тега и ID товара к которому привязан тег:
product_id (ID записи в таблице продуктов) tag_id (ID тега который привязан к продукту)
Но данный вариант кажется слишком громоздким и в случаи большого числа записей банальный "where" будет работать медленно, особенно, если поиск будет осуществлен по нескольким тегам. Какие в целом существуют оптимальные способы реализации тегов товара и поиска по ним? (число товаров 100к+, у групп товаров может быть до 50 тегов).