В плане теории я бы предложил метод "k-Nearest Neighbours" между покупателями. При этом величину k держать где-то в диапазоне 20-50, и предлагать взвешенно пропорционально степени близости те продукты, которые тоже были положительно оценены k соседями.
В плане практики я создал бы вспомогательную таблицу, где для каждого покупателя хранятся его k соседей (поэтому и предлагаю ограничить k около 30) и нормированное расстояние до них. Этой таблицы будет достаточно для того чтобы с высоким быстродействием предлагать рекомендации.
А саму таблицу пересчитывать отдельным потоком в малонагруженное время раз в неделю или раз в месяц (в зависимости от Вашего товарооборота). Пусть это будет занимать час-два. По факту готовности - переливать в боевую таблицу соседей.
Если интересует мое мнение о формуле расстояния между покупателями или алгоритме средневзвешенного предложения - спрашивайте ...