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