推荐接口20190903逻辑
<ol>
<li>用户传recommend_type,根据recommend_type决定推荐类型
1.1 如果recommend_type是概念名,则进入该概念随机抽取对象
1.2 如果recommend_type是栏目类型,则进入栏目推荐</li>
<li>进入栏目推荐会分成两种情况
2.1 有30%的几率触发基于用户最近浏览历史推荐
2.2 有70%的几率触发基于栏目所包含的概念推荐</li>
</ol>
<p>基于用户浏览器历史推荐(步骤)</p>
<ol>
<li>获取栏目下的概念列表</li>
<li>挑选概念
2.1 判断概念的数量
2.1.1 如果概念数量小于等于2,那么返回所有的概念
2.1.2 如果概念数量大于2,那么概念数量除以2,向上取整,然后和2比较,取最大值。得到抽取的次数number
2.1.2.1 根据概念的权重循环进行抽取概念。
2.1.2.2 如果抽取的概念权重大于等于1.5,那么number减1,直到number等于0,结束抽取,整体抽取次数最多60次。</li>
<li>根据挑选的概念,按照比列随机抽取主键,假设前端需要的数量max_number
3.1 如果抽取的概念数量为1,那么这个概念抽取的数量就是max_number
3.2 如果抽取概念数量大于1,那么通过列表推导式,把概念权重大于等于0.15的权重值求和total_rate
3.3 遍历概念列表,如果概念的权重小于0.15,那么max_number<em>权重,向上取整
如果概念权重大于等于0.15,那么权重值除以total_rate再乘以max_number
3.4 遍历概念,根据概念随机抽取对象,抽取数量为概念对应的主键数</em>5,放入到列表keys
3.5 将keys进行过滤,过滤掉3天内推荐过的主键,得到列表obj_keys,随机打乱obj_keys
3.6 遍历obj_keys,按照每个概念对应的数量,抽取足够的主键数量。放入到列表res_li
3.7 进入根据用户浏览历史获取推荐主键
3.8 从数据库中提取指定用户最近的30条对象主键,并且打乱对象主键顺序
3.9 获取到该栏目的推荐的概念列表recommend_concept_li
3.10 遍历主键,从relation_snapshot中提取类型为peers的主键,如果有主键对应的概念在recommend_concept_li里,记录主键,如果没有,在relation_stat中查找关联概念是否在recommend_concept_li,记录对象主键,所有主键收集在obj_key_li
3.11 遍历obj_key_li,提取有关联的概念列表,得到一个字典,每一个主键对应的概念列表related_dict
3.12 遍历related_dict,保证提取5个主键关联的主键数量,得到obj_keys
3.13 从res_li随机去掉3个主键,随机抽取obj_keys的3个主键放入到res_li
3.14 获取res_li的数据
3.15 提取对应的详细信息</li>
</ol>