有点开放性,你会如何处理这种情况,问题。
我正在构建一个系统,要求用户从类别列表中选择任意数量的项目。对于他们选择的每个类别,他们被要求为其分配一个权重(一个值或 1-100 的重要性)。我想描述这些用户类别的最佳方式是加权标签。所以,我可能真的很喜欢吃香蕉,它得到 100,而我非常喜欢的苹果得到 50。我讨厌李子,所以我不选择它。
系统中的某些其他实体将做完全相同的事情,并将拥有自己的一组标签,每个标签都有一个权重。在上面的场景中,一个元素可能是一个“农场”,它们输出的每种水果就是权重值。我想找到的是最符合用户口味的水果农场(例如)。这可能看起来像:
User A: [Tag1: 100, Tag2: 50, Tag4: 10]
Item A: [Tag2: 40, Tag3: 20]
Item B: [Tag1: 100, Tag2: 50, Tag4: 10]
Item C: [Tag3: 20, Tag4: 5]
在这种情况下,项目 B 显然是用户 A 的完美匹配,因此会排在结果集的顶部。我真正想要的是一个系统,该系统可以按照与特定用户的相关性降低的顺序对项目进行排序。
我试过 SQL 和 NoSQL (redis) 实现,尝试找到解决方案,但每次我都发现自己要遍历一个相当大的数据集,并对每个项目中的每个标签进行基本数学运算以计算总体差异。虽然这行得通,但速度会很慢,而且如果我们谈论的是一个包含数千个“项目”的系统,我想这很快就会崩溃。
鉴于涉及三个实体(项目、用户、类别/标签)的两个多对多样式关系,我想不出直接在 SQL 中实现它的方法。我什至无法开始思考如何在 SQL 中比较来自相邻表 User-Category 和 Item-Category 的权重值以产生最终输出。
我想我要的是关于如何实现这个想法的一些想法。
干杯 约翰
最佳答案
您尝试解决的问题看起来与 nearest neighbor 有关问题,对于您提到的标记数据,可以使用各种数据结构来解决。我不太熟悉 SQL,但我敢打赌,如果您搜索最近邻算法,您会找到看起来像您想要的东西的东西。
关于mysql - 以最接近优先的方式匹配加权标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6816753/