У меня есть база данных, полная двух разных типов пользователей (наставников и подопечных), поэтому я хочу, чтобы вторая группа (наставники) могла «искать» людей из первой группы (наставников), которые соответствуют их профилю. Наставники и подопечные могут зайти и изменить элементы в своем профиле в любой момент времени.
В настоящее время я использую Apache Mahout для сопоставления пользователей (recommender.mostSimilarIDs()). Проблема, с которой я сталкиваюсь, заключается в том, что мне приходится перезагружать пользовательские данные каждый раз, когда кто-то выполняет поиск. Само по себе это не занимает много времени, но когда Mahout обрабатывает данные, кажется, что это занимает очень много времени (14 минут для 3000 наставников и 3000 подопечных). После обработки сопоставление занимает считанные секунды. Я также снова и снова получаю одно и то же сообщение INFO во время его обработки («Обработано 2248 пользователей»), хотя просмотр кода показывает, что сообщение должно выводиться только каждые 10000 пользователей.
Я использую GenericUserBasedRecommender и GenericDataModel вместе с NearestNUserNeighborhood, AveragingPreferenceInferrer и PearsonCorrelationSimilarity. Я загружаю наставников из базы данных, добавляю подопечных в список POJO и преобразовываю их в FastByIDMap для передачи в DataModel.
Есть ли лучший способ сделать это? Владельцу продукта необходимо, чтобы данные были актуальными для каждого поиска.