liqian 3 år sedan
förälder
incheckning
a053df73ac
3 ändrade filer med 44 tillägg och 10 borttagningar
  1. 1 1
      config.py
  2. 2 4
      recommend.py
  3. 41 5
      video_recall.py

+ 1 - 1
config.py

@@ -88,7 +88,7 @@ class BaseConfig(object):
     # app应用 小时级数据更新最终结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}.{h}
     APP_FINAL_RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.app.'
 
-    # appType:[18, 19]小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{appType}.{date}
+    # appType:[18, 19]小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{appType}.{date}.{h}
     RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.item.score.'
 
     # appType = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.6.{h}

+ 2 - 4
recommend.py

@@ -423,8 +423,7 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, a
             # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
             if config_.AB_EXP_CODE['rov_rank_appType_18_19'] in ab_exp_code_list:
                 ab_code = config_.AB_CODE['rov_rank_appType_18_19']
-            else:
-                ab_code = config_.AB_CODE['initial']
+                expire_time = 3600
 
         # 简单召回 - 排序 - 兜底
         rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, app_type=app_type,
@@ -508,8 +507,7 @@ def video_relevant_recommend(video_id, mid, uid, size, app_type, ab_exp_info):
         # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
         if config_.AB_EXP_CODE['rov_rank_appType_18_19'] in ab_exp_code_list:
             ab_code = config_.AB_CODE['rov_rank_appType_18_19']
-        else:
-            ab_code = config_.AB_CODE['initial']
+            expire_time = 3600
 
     # 简单召回 - 排序 - 兜底
     rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, app_type=app_type,

+ 41 - 5
video_recall.py

@@ -201,7 +201,11 @@ class PoolRecall(object):
         # log_.info('====== rov pool recall')
 
         # 获取生效中的置顶视频
-        if self.client_info is None:
+        # abCode = 30001   # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
+        if self.ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
+            # appType: [18, 19],不获取置顶视频
+            top_video_ids, top_video_result = [], []
+        elif self.client_info is None:
             # 无用户位置信息时,不获取置顶视频
             top_video_ids, top_video_result = [], []
         else:
@@ -209,7 +213,12 @@ class PoolRecall(object):
             # log_.info('===top video result = {}'.format(top_video_ids))
 
         # 获取修改过rov的视频
-        update_rov_video_ids, update_rov_result = self.get_update_rov_videos()
+        # abCode = 30001   # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
+        if self.ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
+            # appType: [18, 19],不获取修改过rov的视频
+            update_rov_video_ids, update_rov_result = [], []
+        else:
+            update_rov_video_ids, update_rov_result = self.get_update_rov_videos()
         # log_.info('update rov result = {}'.format(update_rov_video_ids))
         # 与置顶视频去重
         update_rov_video_ids_dup, update_rov_dup_result = [], []
@@ -443,8 +452,8 @@ class PoolRecall(object):
             if self.app_type == config_.APP_TYPE['APP']:
                 key_name_prefix = config_.RECALL_KEY_NAME_PREFIX_APP
             # abCode = 30001   # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
-            elif self.ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
-                key_name_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_APP_TYPE}{self.app_type}."
+            # elif self.ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
+            #     key_name_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_APP_TYPE}{self.app_type}."
             # 其他
             else:
                 key_name_prefix = config_.RECALL_KEY_NAME_PREFIX
@@ -479,7 +488,10 @@ class PoolRecall(object):
 
     def get_video_last_idx(self):
         """获取用户上一次在rov召回池对应的位置"""
-        if self.ab_code in config_.AB_CODE['rank_by_h'] or self.app_type == config_.APP_TYPE['APP']:
+        # if self.ab_code in [config_.AB_CODE['rank_by_h']] or self.app_type == config_.APP_TYPE['APP']:
+        # abCode = 30001   # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
+        if self.ab_code in [config_.AB_CODE['rank_by_h'], config_.AB_CODE['rov_rank_appType_18_19']] or \
+                self.app_type == config_.APP_TYPE['APP']:
             rov_pool_key, redis_date = self.get_pool_redis_key_with_h('rov')
         else:
             rov_pool_key, redis_date = self.get_pool_redis_key('rov')
@@ -653,6 +665,30 @@ class PoolRecall(object):
                     key_name = f'{config_.APP_FINAL_RECALL_KEY_NAME_PREFIX}{redis_date}.{redis_h}'
                     return key_name, redis_h
 
+            # elif self.app_type in [config_.APP_TYPE['LAO_HAO_KAN_VIDEO'], config_.APP_TYPE['ZUI_JING_QI']]:
+            # abCode = 30001   # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
+            elif self.ab_code == config_.AB_CODE['rov_rank_appType_18_19']:
+                # 判断热度列表是否更新,未更新则使用前一小时的热度列表
+                key_name_prefix = f"{config_.RECALL_KEY_NAME_PREFIX_APP_TYPE}{self.app_type}."
+                key_name = f"{key_name_prefix}{now_date}.{h}"
+                if self.redis_helper.key_exists(key_name):
+                    return key_name, h
+                else:
+                    if h == 0:
+                        redis_h = 23
+                        redis_date = (date.today() - timedelta(days=1)).strftime('%Y%m%d')
+                    else:
+                        redis_h = h - 1
+                        redis_date = now_date
+                    key_name = f"{key_name_prefix}{redis_date}.{redis_h}"
+                    # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
+                    now_m = datetime.now().minute
+                    feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
+                        config_.ENV_TEXT, self.app_type, h)
+                    if now_m > config_.ROV_H_UPDATE_MINUTE:
+                        send_msg_to_feishu(feishu_text)
+                    return key_name, redis_h
+
             else:
                 # 判断热度列表是否更新,未更新则使用前一小时的热度列表
                 key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_H}{self.return_count}.{now_date}.{h}"