Преглед на файлове

update appType=13 homepage recommend

liqian преди 3 години
родител
ревизия
1f3f1d6255
променени са 3 файла, в които са добавени 51 реда и са изтрити 17 реда
  1. 3 0
      config.py
  2. 13 0
      recommend.py
  3. 35 17
      video_recall.py

+ 3 - 0
config.py

@@ -58,6 +58,9 @@ class BaseConfig(object):
     # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}
     RECALL_KEY_NAME_PREFIX_APP = 'com.weiqu.video.recall.hot.item.score.app.'
 
+    # 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 = 6, ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.apptype.h.item.score.6.{h}
     RECALL_KEY_NAME_PREFIX_APP_TYPE = 'com.weiqu.video.recall.hot.apptype.h.item.score.6.'
 

+ 13 - 0
recommend.py

@@ -342,6 +342,19 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info):
         # redis数据刷新
         update_redis_data(result=result, app_type=app_type, mid=mid, last_rov_recall_key=last_rov_recall_key,
                           expire_time=3600)
+    elif app_type == config_.APP_TYPE['APP']:
+        # 票圈视频APP
+        # 简单召回 - 排序 - 兜底
+        rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, size=size, app_type=app_type,
+                                                           algo_type=algo_type, client_info=client_info,
+                                                           expire_time=3600)
+        # ab-test
+        result = ab_test_op(rank_result=rank_result,
+                            ab_code_list=[config_.AB_CODE['position_insert']],
+                            app_type=app_type, mid=mid, uid=uid)
+        # redis数据刷新
+        update_redis_data(result=result, app_type=app_type, mid=mid, last_rov_recall_key=last_rov_recall_key,
+                          expire_time=3600)
     else:
         # 简单召回 - 排序 - 兜底
         rank_result, last_rov_recall_key = video_recommend(mid=mid, uid=uid, size=size, app_type=app_type,

+ 35 - 17
video_recall.py

@@ -315,7 +315,7 @@ class PoolRecall(object):
 
     def get_video_last_idx(self):
         """获取用户上一次在rov召回池对应的位置"""
-        if self.ab_code == config_.AB_CODE['rank_by_h']:
+        if self.ab_code == config_.AB_CODE['rank_by_h'] 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')
@@ -456,24 +456,42 @@ class PoolRecall(object):
         if pool_type == 'rov':
             # 获取当前所在小时
             h = datetime.now().hour
-            # 判断热度列表是否更新,未更新则使用前一小时的热度列表
-            key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, h)
-            if self.redis_helper.key_exists(key_name):
-                return key_name, h
+
+            # appType = 13, 票圈视频APP
+            if self.app_type == config_.APP_TYPE['APP']:
+                now_date = date.today().strftime('%Y%m%d')
+                key_name = f'{config_.APP_FINAL_RECALL_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'{config_.APP_FINAL_RECALL_KEY_NAME_PREFIX}{redis_date}.{redis_h}'
+                    return key_name, h
+
             else:
-                if h == 0:
-                    redis_h = 23
+                # 判断热度列表是否更新,未更新则使用前一小时的热度列表
+                key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, h)
+                if self.redis_helper.key_exists(key_name):
+                    return key_name, h
                 else:
-                    redis_h = h - 1
-                key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, redis_h)
-                # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
-                now_m = datetime.now().minute
-                feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
-                    config_.ENV_TEXT, self.app_type, h)
-                if now_m > config_.ROV_UPDATE_MINUTE_6 and h > 0:
-                    # h=0时,因数据首次更新耗时长,不做报警
-                    send_msg_to_feishu(feishu_text)
-                return key_name, redis_h
+                    if h == 0:
+                        redis_h = 23
+                    else:
+                        redis_h = h - 1
+                    key_name = '{}{}'.format(config_.RECALL_KEY_NAME_PREFIX_APP_TYPE, redis_h)
+                    # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
+                    now_m = datetime.now().minute
+                    feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(
+                        config_.ENV_TEXT, self.app_type, h)
+                    if now_m > config_.ROV_UPDATE_MINUTE_6 and h > 0:
+                        # h=0时,因数据首次更新耗时长,不做报警
+                        send_msg_to_feishu(feishu_text)
+                    return key_name, redis_h
 
         elif pool_type == 'flow':
             return config_.FLOW_POOL_KEY_NAME_PREFIX + str(self.app_type)