Вы действительно должны смотреть на то, что обрабатывает отношения.То, что вам нужно, это то, что реализует граф (то есть узлы и ребра), тогда вы используете обход графа, чтобы найти узлы, которые соответствуют вашим критериям.Это сильно упрощает, но рекомендательные движки не легки.