【发布时间】:2015-08-03 12:02:47
【问题描述】:
我一直在为书籍设计一个简单的推荐系统。所以在注册时我会要求用户选择他们最喜欢的流派。每本书也会有一个流派,而且每个流派都有一个权重。
假设 Book 模型有一个字段 Genre_Score(一个文本字段,它是 json 格式的字典,键为流派,值为权重)类似于
{"Thriller":5, "Adventure":59,"Biography":21}
类似地,每个用户模型都会有类似的 Genre_Score
{"Thriller":1, "Adventure":1,"Biography":2}
现在,在每本书完成后,我会要求用户回答他是否喜欢这本书,并相应地更新该书和用户的 Genre_Score。 使用上述(json 格式的文本字段)数据结构是一种好方法吗? 查询是否会非常昂贵,因为我必须为每个用户生成一个与他的 Genre_score 和 Books 的流派分数匹配的 Feed?还是我应该一起采取不同的方法?
【问题讨论】:
-
你在使用 PostgreSQL 吗?你知道 Django 没有内置 DictField 吗?另一种方法是拥有一个
Genre模型和一个从Book到Genre的ManyToMany,并将分数存储在直通模型上 -
我的意思是 JSON 格式的文本字段。对困惑感到抱歉。是的,您提到的另一种方法也是我认为会比这种方法更好的方法吗?
-
如果您将 JSON 文本存储在文本字段中,您将无法在 dict 中查询特定值
-
我会从多对多模型方法开始,首先让它以这种方式工作,稍后您将能够查看是否有任何查询太慢......并知道您是哪些将更好地了解需要优化的内容(如果有的话)
-
所以一个类型模型与书籍/用户模型具有 m2m 关系。流派模型将包含字段genre_name、genre_score? Genre_score 会是一个问题吗?匹配仍然很困难,即为特定用户创建提要?
标签: python django recommendation-engine