gpt4 book ai didi

ruby-on-rails - 用户匹配系统,高效的搜索方式?

转载 作者:太空狗 更新时间:2023-10-30 01:57:26 25 4
gpt4 key购买 nike

编辑:我知道已经过去一年多了,但我终于对这个问题有了新的认识。要查看此问题的更新,请查看此问题:Rails 3 user matching-algorithm to SQL Query (COMPLICATED)

我在一个网站上工作,该网站根据回答的问题匹配用户。

每次用户访问另一个用户的个人资料页面时都会计算匹配百分比。因此匹配百分比不会存储在数据库中,而是一直重新计算。

现在我想构建一个搜索,用户可以在其中搜索最匹配的内容。

我的问题是,最有效的方法是什么?

如果我有 50,000 个用户并且我必须按匹配百分比列出他们怎么办?我是否必须计算一个和其他 50k 用户之间的每个匹配百分比,然后从中创建一个列表?对我来说听起来有点低效。这不会大大降低应用程序的速度吗?

我希望有人能帮我解决这个问题,因为这让我有点头疼。

编辑:为了清楚一点,这是我的用户、问题、答案、user_answers 和 accepted_answers 的数据库模型:

    Tables:
Users(:id, :username, etc.)
Questions(:id, :text)
Answers(:id, :question_id, :text)
UserAnswers(:id, :user_id, :question_id, :answer_id, :importance)
AcceptedAnswers(:id, :user_answer_id, :answer_id)

Questions <-> Answers: one-to-many
Questions <-> UserAnswers: one-to-many
Users <-> UserAnswers: one-to-many
UserAnswers <-> AcceptableAnswers: one-to-many

所以有一个问题列表(以及这个问题的可能答案),用户给这些问题他们的“用户答案”,分配这个问题对他们的重要性以及他们从其他用户那里接受什么答案。

然后,如果您使用 User1 和 User2,您会查找常见的已回答问题,因此 UserAnswers 其中的 question_id 是相同的。他们有 10 个共同的问题。 User1 为前五个问题赋予了重要性值 10,为其他五个问题赋予了重要性值 20。用户 2 对两个 20 分和三个 10 分的问题给出了可接受的答案。总分70分。最高可达到的分数当然是 20x5 + 10x5 ...所以用户 2 达到了 70/150 * 100 = 46,66% ...同样的事情是相反的,用户 1 达到了用户 2 分配给这些问题的分数.然后通过几何平均值组合这 2 个百分比:sqrt of percentage1 * percentage2 ... 这给出了最终匹配百分比

最佳答案

@Wassem 的回答似乎恰到好处地解决了您的问题。我还建议您采取一种方法,根据新答案和新接受的答案更新百分比。

我创建了一个仅限数据库的解决方案 ( gist ),它可以工作,但具有额外的中间表复杂性。

理想情况下,您应该再创建两个表,一个用于重要性,另一个用于百分比匹配。当用户分配/更新答案的重要性或将某些答案标记为可接受时,您应该在这些表中创建/插入/删除行。您还可以利用 delayed_job 或 rescue 在特定操作的后台更新表。

您可能需要偶尔运行 sql 以同步两个新表中的数据,因为在某些情况下,由于并发以及更新操作的顺序可能会导致不一致。

已接受答案的更新应该是直接的,因为您只需要更新一对。但如果有人重视某个问题,则可能需要进行大量计算,并且可能需要更新大量百分比。为避免这种情况,您可能选择只维护包含每对重要性总和的表,在需要时更新它并即时计算实际百分比(在 db off-course 中)。

关于ruby-on-rails - 用户匹配系统,高效的搜索方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com