liqian 3 years ago
parent
commit
e3295b3a2e
3 changed files with 27 additions and 27 deletions
  1. 3 3
      config.py
  2. 16 16
      recommend.py
  3. 8 8
      video_recall.py

+ 3 - 3
config.py

@@ -67,11 +67,11 @@ class BaseConfig(object):
     # ROV召回池redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.{date}
     RECALL_KEY_NAME_PREFIX = 'com.weiqu.video.recall.hot.item.score.'
 
-    # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.h.{return_count}.{date}.{h}
+    # 小程序小时级更新结果存放 redis key前缀,完整格式:com.weiqu.video.recall.item.score.h.{rule_key}.{date}.{h}
     RECALL_KEY_NAME_PREFIX_BY_H = 'com.weiqu.video.recall.item.score.h.'
 
     # 小程序离线ROV模型结果与小程序小时级更新结果去重后 存放 redis key前缀,
-    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{return_count}{date}.{h}
+    # 完整格式:com.weiqu.video.recall.hot.item.score.dup.h.{rule_key}{date}.{h}
     RECALL_KEY_NAME_PREFIX_DUP_H = 'com.weiqu.video.recall.hot.item.score.dup.h.'
 
     # 每个mid存储对应小时级更新结果 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.h.mid.{mid}
@@ -79,7 +79,7 @@ class BaseConfig(object):
     # 记录 mid-小时级key 中数据所属(date,h),完整格式:com.weiqu.video.h.record.mid.{mid}
     H_WITH_MID_RECORD_KEY_NAME_PREFIX = 'com.weiqu.video.h.record.mid.'
 
-    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.{return_count}
+    # 小时级视频状态不符合推荐要求的列表 redis key,完整格式:com.weiqu.video.filter.h.item.{rule_key}
     H_VIDEO_FILER = 'com.weiqu.video.filter.h.item.'
 
     # app应用 小程序离线ROV模型结果存放 redis key前缀,完整格式:com.weiqu.video.recall.hot.item.score.app.{date}

+ 16 - 16
recommend.py

@@ -136,7 +136,7 @@ def positon_duplicate(pos1_vids, pos2_vids, videos):
 
 
 def video_recommend(mid, uid, size, top_K, flow_pool_P, app_type, algo_type, client_info, expire_time=24*3600,
-                    ab_code=config_.AB_CODE['initial'], return_count=-1):
+                    ab_code=config_.AB_CODE['initial'], rule_key=''):
     """
     首页线上推荐逻辑
     :param mid: mid type-string
@@ -171,7 +171,7 @@ def video_recommend(mid, uid, size, top_K, flow_pool_P, app_type, algo_type, cli
     '''
     recall_result_list = []
     pool_recall = PoolRecall(app_type=app_type, mid=mid, uid=uid, ab_code=ab_code,
-                             client_info=client_info, return_count=return_count)
+                             client_info=client_info, rule_key=rule_key)
     _, last_rov_recall_key, _ = pool_recall.get_video_last_idx()
     if ab_code in config_.AB_CODE['rank_by_h']:
         t = [gevent.spawn(pool_recall.rov_pool_recall_by_h, size, expire_time),
@@ -377,7 +377,7 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, a
         if not ab_exp_info:
             ab_code = config_.AB_CODE['initial']
             expire_time = 24 * 3600
-            return_count = -1
+            rule_key = ''
         else:
             ab_exp_code_list = []
             config_value_dict = {}
@@ -407,18 +407,18 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, a
             #     flow_pool_P = config_.P
 
             # 小时级更新-规则1 实验
-            if config_.AB_EXP_CODE['rule_rank1_20'] in ab_exp_code_list:
+            if config_.AB_EXP_CODE['rule_rank1'] in ab_exp_code_list:
                 ab_code = config_.AB_CODE['rank_by_h'][0]
                 expire_time = 3600
-                return_count = 20
-            elif config_.AB_EXP_CODE['rule_rank1_10'] in ab_exp_code_list:
+                rule_key = 'rule1'
+            elif config_.AB_EXP_CODE['rule_rank2'] in ab_exp_code_list:
                 ab_code = config_.AB_CODE['rank_by_h'][1]
                 expire_time = 3600
-                return_count = 10
+                rule_key = 'rule2'
             else:
                 ab_code = config_.AB_CODE['initial']
                 expire_time = 24 * 3600
-                return_count = -1
+                rule_key = ''
 
             # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
             if config_.AB_EXP_CODE['rov_rank_appType_18_19'] in ab_exp_code_list:
@@ -430,7 +430,7 @@ def video_homepage_recommend(mid, uid, size, app_type, algo_type, client_info, a
                                                            size=size, top_K=top_K, flow_pool_P=flow_pool_P,
                                                            algo_type=algo_type, client_info=client_info,
                                                            ab_code=ab_code, expire_time=expire_time,
-                                                           return_count=return_count)
+                                                           rule_key=rule_key)
         # ab-test
         # result = ab_test_op(rank_result=rank_result,
         #                     ab_code_list=[config_.AB_CODE['position_insert']],
@@ -460,7 +460,7 @@ def video_relevant_recommend(video_id, mid, uid, size, app_type, ab_exp_info):
     if not ab_exp_info:
         ab_code = config_.AB_CODE['initial']
         expire_time = 24 * 3600
-        return_count = -1
+        rule_key = ''
     else:
         ab_exp_code_list = []
         config_value_dict = {}
@@ -491,18 +491,18 @@ def video_relevant_recommend(video_id, mid, uid, size, app_type, ab_exp_info):
         #     flow_pool_P = config_.P
 
         # 小时级更新-规则1 实验
-        if config_.AB_EXP_CODE['rule_rank1_20'] in ab_exp_code_list:
+        if config_.AB_EXP_CODE['rule_rank1'] in ab_exp_code_list:
             ab_code = config_.AB_CODE['rank_by_h'][0]
             expire_time = 3600
-            return_count = 20
-        elif config_.AB_EXP_CODE['rule_rank1_10'] in ab_exp_code_list:
+            rule_key = 'rule1'
+        elif config_.AB_EXP_CODE['rule_rank2'] in ab_exp_code_list:
             ab_code = config_.AB_CODE['rank_by_h'][1]
             expire_time = 3600
-            return_count = 10
+            rule_key = 'rule2'
         else:
             ab_code = config_.AB_CODE['initial']
             expire_time = 24 * 3600
-            return_count = -1
+            rule_key = ''
 
         # 老好看视频 / 票圈最惊奇 首页/相关推荐逻辑更新实验
         if config_.AB_EXP_CODE['rov_rank_appType_18_19'] in ab_exp_code_list:
@@ -514,7 +514,7 @@ def video_relevant_recommend(video_id, mid, uid, size, app_type, ab_exp_info):
                                                        size=size, top_K=top_K, flow_pool_P=flow_pool_P,
                                                        algo_type='', client_info=None,
                                                        ab_code=ab_code, expire_time=expire_time,
-                                                       return_count=return_count)
+                                                       rule_key=rule_key)
     # ab-test
     # result = ab_test_op(rank_result=rank_result,
     #                     ab_code_list=[config_.AB_CODE['position_insert'], config_.AB_CODE['relevant_video_op']],

+ 8 - 8
video_recall.py

@@ -14,7 +14,7 @@ config_ = set_config()
 
 class PoolRecall(object):
     """召回"""
-    def __init__(self, app_type, client_info=None, mid='', uid='', ab_code='', return_count=-1):
+    def __init__(self, app_type, client_info=None, mid='', uid='', ab_code='', rule_key=''):
         """
         初始化
         :param app_type: 产品标识 type-int
@@ -28,7 +28,7 @@ class PoolRecall(object):
         self.uid = uid
         self.ab_code = ab_code
         self.client_info = client_info
-        self.return_count = return_count
+        self.rule_key = rule_key
         self.redis_helper = RedisHelper()
 
     def copy_redis_zset_data(self, from_key_name, to_key_name):
@@ -55,7 +55,7 @@ class PoolRecall(object):
         now_date = datetime.today()
         h = datetime.now().hour
         now_dt = datetime.strftime(now_date, '%Y%m%d')
-        now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.return_count}.{now_dt}.{h}"
+        now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.rule_key}.{now_dt}.{h}"
         if self.redis_helper.key_exists(key_name=now_h_recall_key):
             flag = self.copy_redis_zset_data(from_key_name=now_h_recall_key, to_key_name=h_recall_mid_key)
             if flag:
@@ -68,7 +68,7 @@ class PoolRecall(object):
             else:
                 redis_dt = now_dt
                 redis_h = h - 1
-            now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.return_count}.{redis_dt}.{redis_h}"
+            now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.rule_key}.{redis_dt}.{redis_h}"
             flag = self.copy_redis_zset_data(from_key_name=now_h_recall_key, to_key_name=h_recall_mid_key)
             if flag:
                 value = {'date': redis_dt, 'h': redis_h}
@@ -98,7 +98,7 @@ class PoolRecall(object):
                 # return h_recall_mid_key
             elif (record_dt == now_dt and h-int(record_h) == 1) or (h == 0 and int(record_h) == 23):
                 # 记录的h - 当前h = 1,判断当前h数据是否已更新
-                now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.return_count}.{now_dt}.{h}"
+                now_h_recall_key = f"{config_.RECALL_KEY_NAME_PREFIX_BY_H}{self.rule_key}.{now_dt}.{h}"
                 # if not self.redis_helper.key_exists(key_name=now_h_recall_key):
                     # 未更新
                     # return h_recall_mid_key
@@ -156,7 +156,7 @@ class PoolRecall(object):
                     video_score[video_id] = value[1]
                 # 过滤
                 filter_ = FilterVideos(app_type=self.app_type, mid=self.mid, uid=self.uid, video_ids=video_ids)
-                ge = gevent.spawn(filter_.filter_videos_h, self.return_count)
+                ge = gevent.spawn(filter_.filter_videos_h, self.rule_key)
                 ge.join()
                 filtered_result = ge.get()
 
@@ -691,7 +691,7 @@ class PoolRecall(object):
 
             else:
                 # 判断热度列表是否更新,未更新则使用前一小时的热度列表
-                key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_H}{self.return_count}.{now_date}.{h}"
+                key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_H}{self.rule_key}.{now_date}.{h}"
                 if self.redis_helper.key_exists(key_name):
                     return key_name, h
                 else:
@@ -701,7 +701,7 @@ class PoolRecall(object):
                     else:
                         redis_h = h - 1
                         redis_date = now_date
-                    key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_H}{self.return_count}.{redis_date}.{redis_h}"
+                    key_name = f"{config_.RECALL_KEY_NAME_PREFIX_DUP_H}{self.rule_key}.{redis_date}.{redis_h}"
                     # 判断当前时间是否晚于数据正常更新时间,发送消息到飞书
                     now_m = datetime.now().minute
                     feishu_text = '{} —— appType = {}, h = {} 数据未按时更新,请及时查看解决。'.format(