Как реализовать систему «похожих товаров» для товаров, описываемых набором тегов?
В моей базе данных есть три таблицы: Article, ArticleTag и Tag. Каждая статья связана с рядом тегов отношением «многие ко многим». Для каждой статьи я хочу найти пять наиболее похожих статей, чтобы внедрить систему «если вам понравилась эта статья, вам понравятся и эти».
Я знаком с подобием косинуса, и этот алгоритм работает очень хорошо. Но это способ замедлить. Для каждой статьи мне нужно выполнить итерацию по всем статьям, вычислить косинусное сходство для пары статей, а затем выбрать пять статей с наивысшим рейтингом сходства.
С 200 тысячами статей и 30 тысячами тегов мне требуется полминуты, чтобы подсчитать количество похожих статей для одной статьи. Поэтому мне нужен другой алгоритм, который дает примерно такие же хорошие результаты, как косинусное сходство, но который можно запускать в реальном времени и который не требует от меня каждый раз перебирать весь корпус документа.
Может быть, кто-то может предложить готовое решение для этого? Большинство поисковых систем, на которые я смотрел, не позволяют выполнять поиск по сходству документов.