Вот один из самых простых способов: вам нужно сначала пометить свои продукты. Маркировка - это, по сути, категоризация, но важно, чтобы вы могли распределить продукт по нескольким категориям (или тегам).
Теперь, когда продукт ищется, вы должны запустить соответствующий запрос для тегов - например, предполагая три простые таблицы: product_master, tag_master и product_tag (many_to_many Relationships), MS Sql-запрос, например, который бы сделал трюк
select
t.tag_name,
count distinct (pt.product_id)
from
tag_master t
inner join product_tag pt
on t.tag_id = pt.tag_id
inner join product p
on pt.product_id = p.product_id
Where
p.name like '%search_term%'
group by
t.tag_name
По сути, для самого поиска товара вам нужно запустить такой запрос. Как правило, вы подходите по нескольким тысячам тегов, поэтому вы кэшируете результат запроса при дальнейшей поисковой выдаче. Развертывание по тегу / категории просто добавит предложение where.
Вы можете расширить запрос на поддержку иерархий в тегах (или категориях).