用户的兴趣表计算
<ol>
<li>数据表结构参考
<a href="https://www.showdoc.cc/138691617729638?page_id=1328357381584708">https://www.showdoc.cc/138691617729638?page_id=1328357381584708</a>
1.用户端新增字段:概念名和概念对应的前端类型(fronttype)</li>
<li>特殊动作回传
新增:点赞、收藏、转发、评论 0 没有 1 点赞、收藏、转发、评论
超出协定数量:数据进行截断(前端考虑)</li>
</ol>
<p>每日用户对象浏览表
删除字段 开始浏览时间和结束浏览时间
新增对象的浏览的次数
新增字段:点赞(对象,点击评论不算)、收藏、转发、评论(对象,如果是评论已有评论不算)
访问次数:累加
访问时间:累加</p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c146e2bbf2da01458eca7b7bfdcc2a62?showdoc=.jpg" alt="" /></p>
<p>表名:view</p>
<h2>短期兴趣表计算逻辑:</h2>
<p>1.指定开始日期和结束日期从每日对象统计表提取数据</p>
<p><strong>对象浏览表</strong>
2.统计每个对象的浏览次数
{'cxxx':15,'cxx':15}</p>
<p><strong>对象时长表</strong>
2.统计每个对象的浏览时长(单位秒)
{'cxx':90,'cxx':1500}</p>
<p><strong>对象的点赞收藏表</strong></p>
<ol>
<li>从点赞表(like)中提取.指定开始日期和结束日期的数据</li>
<li>统计每个对象的点赞
{'cxxx':1,'cxx':1'cxx':1}</li>
<li>从收藏表(collect)中提取.指定开始日期和结束日期的数据</li>
<li>统计收藏的对象
{'cxxx':1,'cxx':1'cxx':1}
5.从转发表(share)中提取.指定开始日期和结束日期的数据
{'cxxx':5,'cxx':2}</li>
</ol>
<p><strong>对象的评论次数表</strong>
1.从评论表(comment)中提取.指定开始日期和结束日期的数据
2.统计每个对象评论数量
{'cxxx':5,'cxx':2}</p>
<p><strong>概念的浏览概率表</strong>
1.加工 对象浏览表 结果,计算出每个概念的的浏览次数
{'人物':10}</p>
<p><strong>概念的浏览时常表</strong></p>
<ol>
<li>加工对象时长表的结果,计算每个概念的浏览时长
{'人物':10}</li>
</ol>
<p><strong>概念的点赞收藏表</strong></p>
<ol>
<li>加工对象的点赞收藏表。计算每个对象的点赞收藏分享的数据</li>
</ol>
<p><strong>概念的评论次数表</strong></p>
<ol>
<li>加工对象的评论次数表数据,计算出每个概念的评论次数</li>
</ol>
<p>将计算出的数据写入到short_interest表中</p>
<h2>长期兴趣表计算逻辑:</h2>
<ol>
<li>把短期兴趣表计算结果汇合 求平均值就是长期兴趣表结算结果</li>
</ol>
<h1>第二种计算方法</h1>
<h2>短期兴趣表计算逻辑</h2>
<ol>
<li>每日把用户当天的行为记录经过统计汇总到一张对象浏览表中。表名 object_views</li>
</ol>
<table>
<thead>
<tr>
<th>字段</th>
<th>类型</th>
<th>必要</th>
<th>长度</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>user_id</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>用户id</td>
</tr>
<tr>
<td>obj_key</td>
<td>str</td>
<td>是</td>
<td>30</td>
<td>对象主键</td>
</tr>
<tr>
<td>concept_name</td>
<td>str</td>
<td>是</td>
<td>30</td>
<td>概念名</td>
</tr>
<tr>
<td>spend_time</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>浏览时长</td>
</tr>
<tr>
<td>number</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>浏览次数</td>
</tr>
<tr>
<td>comment</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>评论次数</td>
</tr>
<tr>
<td>like</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>点赞次数</td>
</tr>
<tr>
<td>collect</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>搜藏次数</td>
</tr>
<tr>
<td>ctime</td>
<td>datetime</td>
<td>是</td>
<td></td>
<td>日期</td>
</tr>
</tbody>
</table>
<ol>
<li>概念浏览表在对象浏览表的基础加工,表名:concept_views</li>
</ol>
<table>
<thead>
<tr>
<th>字段</th>
<th>类型</th>
<th>必要</th>
<th>长度</th>
<th>解释</th>
</tr>
</thead>
<tbody>
<tr>
<td>user_id</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>用户id</td>
</tr>
<tr>
<td>concept_name</td>
<td>str</td>
<td>是</td>
<td>30</td>
<td>概念名</td>
</tr>
<tr>
<td>spend_time</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>浏览时长</td>
</tr>
<tr>
<td>number</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>浏览次数</td>
</tr>
<tr>
<td>comment</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>评论次数</td>
</tr>
<tr>
<td>like</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>点赞次数</td>
</tr>
<tr>
<td>collect</td>
<td>int</td>
<td>是</td>
<td>11</td>
<td>搜藏次数</td>
</tr>
<tr>
<td>ctime</td>
<td>datetime</td>
<td>是</td>
<td></td>
<td>日期</td>
</tr>
</tbody>
</table>
<ol>
<li>
<p>然后根据对象浏览表和概念浏览表加工出用户短期信息表数据,写入redis
有序集合表</p>
<pre><code>redis键名:User:Short_Insterest:Object:12:{'对象主键':12 // 次数
}
redis键名:User:Short_Insterest:Concept:12:{'概念名编号/虚拟对象分组pkey':12 // 次数
}</code></pre>
</li>
<li>根据用户短期信息表数据再加工出用户长期信息表数据,写入redis
redis键名:User:Long_Insterest:12
有序集合表
<pre><code>redis键名:User:Long_Insterest:Object:12:{'对象主键':12 // 次数
}
redis键名:User:Long_Insterest:Concept:12:{'概念名编号/虚拟对象分组pkey':12 // 次数
}</code></pre></li>
</ol>
<pre><code>class A():
# 获取用户短期兴趣结果,如果没有返回空字典
def getShortInterest():
pass
# 计算短期兴趣表数据
def calcObjectShortInterest():
pass
def 定时统计长期兴趣表():
pass
def 长期兴趣表数据生成():
pass
def 默认兴趣表():
pass
# 检查短期兴趣表/长期兴趣表是否存在
def existKey(key):
pass
# 统计用户对象短期兴趣表的主键数量
def getObjectShortInterestNumber():
pass
# 提取用户短期兴趣表 指定数量,分值从高到低 可以提取每个主键对应的分值
def getObjectShortInterset(start,end):
pass
# 保存数据
def save(key,data,有效期):
pass
def 将对象浏览数据按照对象合并,写入mysql():
pass</code></pre>