Django为约会应用匹配设计模型

时间:2017-12-23 19:27:55

标签: django django-models

我正在为一个黑客马拉松项目的约会应用程序工作。我们有一系列用户填写的问题,然后每隔几天我们就会发送建议的匹配项。如果有人有这些匹配算法的好教程,我们将非常感激。一个想法是为每个问题分配一个点值,然后做一个     def比较(person_a,person_b)函数,你迭代这些问题,并且有一个共同的答案,你添加一个点。所以得分越高,比赛越好。到目前为止我理解这一点,但我很难看到如何在数据库中保存这些数据。

在python中,我可以接受每个用户,然后使用此比较函数遍历所有其他用户,并为列出所有其他用户的每个人和他们的分数制作一个字典。然后建议匹配,我遍历字典列表,如果该人尚未与该人匹配,则进行匹配。

person1_dictionary_of_matches = {‘person2’: 3,  ‘person3’: 5,  ‘person4’: 10,  ‘person5’: 12, ‘person6’: 2,……,‘person200’:10}
person_1_list_of_prior_matches = [‘person3’, 'person4']

我正在努力学习如何在django中表现这一点。我可以拥有一大堆用户并制作匹配模型,如:

class Match(Model):
     person1 = models.ForeignKey(User)
     person2 = models.ForeignKey(User)
     score = models.PositiveIntegerField()

我在哪里进行迭代并保存所有成对分数。

然后再做     person_matches = Match.objectsfilter(person1 = sarah,person2!= sarah).order_by('得分')。exclude(list_of_past_matches中的person2)

但是我担心1000个用户,如果这样做,我的表中会有1000000行。为数据库中的每个用户保存所有这些成对分数,这是否是残酷的?或者,如果我在周日晚上凌晨1点运行它,或者只是缓存这些响应一次并使用比较几个月,这无关紧要吗?有没有更好的方法来做到这一点,而不是成对匹配每个人?我应该使用其他一些数据结构来捕获人员及其兼容性分数吗?非常感谢任何指导!

1 个答案:

答案 0 :(得分:1)

有趣的问题。在机器学习的当前范例中,您使用稀疏矩阵,这意味着您不必执行每个匹配评估。稀疏性可能来自两个选择:

  1. 创建数据的批量脱机分析以执行某些群集(花哨的解决方案)。
  2. 通过一些关键属性过滤个人:a)性别/性偏好,b)地理位置,c)约会状态等(简单解决方案)
  3. 过滤后,您可以执行一项功能,以便为新用户估算适当的匹配项。基于用户选择的选择选择匹配到数据库中以供将来查询。但是,如果你认真对待这个问题我建议你试试Spark。这不是SQL数据库的问题,而是大数据引擎的问题。