业务需求如下:
一个用户要填写三个分类,每个分类下最多选择5个标签,如下:
用户A选择的标签情况:
金额:200万-300万、300万-500万、500万-1000万 (最多5个)
轮次:天使轮、A轮、B轮、D轮 (最多5个)
行业:金融、互联网、医疗、科技 (最多5个)
现有上万条项目的数据,每条数据都有自己的标签,如下:
项目1所属标签:
金额:200万-300万 (单选)
轮次:天使轮 (单选)
行业:互联网、科技、物流(最多5个)
项目2所属标签:
金额:1000万-1500万(单选)
轮次:C轮 (单选)
行业:科技、互联网(最多5个)
····(上万条数据)
标签权重:
金额:
id | name | score |
---|---|---|
1 | 100万-200万 | 0.6 |
2 | 200万-300万 | 0.8 |
3 | 300万-500万 | 0.5 |
4 | 500万-1000万 | 0.3 |
5 | 1000万-1500万 | 0.7 |
6 | 1500万-2000万 | 0.6 |
7 | 2000万-5000万 | 0.2 |
轮次:
id | name | score |
---|---|---|
1 | 种子轮 | 0.4 |
2 | 天使轮 | 0.7 |
3 | A轮 | 0.8 |
4 | pre-A轮 | 0.1 |
5 | B轮 | 0.5 |
6 | C轮 | 0.2 |
7 | D轮 | 0.2 |
行业:
id | name | score |
---|---|---|
1 | 互联网 | 0.9 |
2 | 医药 | 0.4 |
3 | 科技 | 0.6 |
4 | 物联网 | 0.6 |
5 | 物流 | 0.7 |
6 | 制造 | 0.3 |
7 | 餐饮 | 0.5 |
现在需要根据用户A的标签来给他匹配对应的项目(只要项目中含有A选择的所有分类标签中的某一个标签就算匹配),并将匹配到的项目按照标签匹配的权重由高到底来排序
比如项目1和A匹配的权重为:
0.8(200万-300万)+0.7(天使轮)+0.9(互联网)+0.6(科技)=3
如何实现这样的需求(项目是基于laravel框架)??
mysql原生是实现不了的,可以按权重的公式技术排序结果把所以的可能匹配的排序全部缓存起来,问题在于更新操作的出,laravel的话可以用自带的队列结合redis的订阅和发布机制
=。= 我们是类似美团的项目 做商家多条件筛选的时候有个条件是距离 这个没法缓存啊 而且我们用的还是tp5
老哥可以说一下你们这块做得怎么样了吗