mysql - 以最接近优先的方式匹配加权标签

标签 mysql algorithm computer-science relational-database

有点开放性,你会如何处理这种情况,问题。

我正在构建一个系统,要求用户从类别列表中选择任意数量的项目。对于他们选择的每个类别,他们被要求为其分配一个权重(一个值或 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/

相关文章:

php - 在php和mysql中通过product_id删除产品

c++ - 如何在C++中创建可变尺寸的网格?

algorithm - 前缀评估使用队列?

algorithm - 目前认为用于二维点匹配的 "best"算法是什么?

c - 调用另一个递归函数的递归函数的运行时分析

java - ArrayList add() 方法行为怪异?

MySQL - 仅选择那些没有其他值的

mysql - 哪些已经存在的drop程序?

Mysql SUM 基于条件

algorithm - 单调递增二维数组