我有一个数据库,里面有两种不同类型的用户(导师和被指导者),我希望第二组(受训者)能够“搜索”第一组(导师)中与他们的个人资料相匹配的人。导师和被指导者可以随时进入并更改其个人资料中的项目。
目前,我正在使用Apache Mahout进行用户匹配(recommender.mostSimilarIDs())。我遇到的问题是,每次有人搜索时我都必须重新加载用户数据。就其本身而言,这并不需要那么长时间,但是当Mahout处理数据时,它似乎需要很长时间(对于3000名导师和3000名被提升者来说是14分钟)。处理完毕后,匹配只需几秒钟。我在处理过程中一遍又一遍地获得相同的INFO消息(“Processed 2248 users”),同时查看代码显示该消息应该每10000个用户输出一次。
我正在使用GenericUserBasedRecommender和GenericDataModel,以及NearestNUserNeighborhood,AveragingPreferenceInferrer和PearsonCorrelationSimilarity。我从数据库加载导师,将mentee添加到POJO列表并将它们转换为FastByIDMap以提供给DataModel。
有更好的方法吗?产品所有者需要数据在每次搜索时都是最新的。
答案 0 :(得分:1)
(我是作者。)
你不应该每次都要求它重新加载数据,为什么?
14分钟听起来很长,加载这么少量的数据太长了,出了点问题。您可以访问user@mahout.apache.org了解更多信息。您正在查看来自DataModel
的日志消息,您可以在所选的日志记录系统中禁用该消息。它打印一个最终计数。这没什么可担心的。
我会建议你不要使用PreferenceInferrer
,除非你绝对知道自己想要它。你真的有评分吗?如果没有,我可能会建议LogLikelihoodSimilarity
。