liqian 2 years ago
parent
commit
18c7e33de1
4 changed files with 25 additions and 21 deletions
  1. 1 1
      config.py
  2. 9 7
      manager_op.py
  3. 8 7
      recommend.py
  4. 7 6
      video_recall.py

+ 1 - 1
config.py

@@ -214,7 +214,7 @@ class BaseConfig(object):
             'ab_code': AB_CODE['region_rank_by_h'].get('abtest_130')
         },  # 095实验基础上去除大列表,进行兜底策略优化
         '139': {
-            'data_key': 'data1', 'rule_key': 'rule9',
+            'data_key': 'data1', 'rule_key': 'rule9', '30day_rule_key': 'rule1',
             'ab_code': AB_CODE['region_rank_by_h'].get('abtest_139')
         }
     }

+ 9 - 7
manager_op.py

@@ -35,6 +35,7 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
     # app_type = key_params.get('app_type')
     data_key = key_params.get('data_key')
     rule_key = key_params.get('rule_key')
+    rule_key_30day = key_params.get('30day_rule_key')
     if data_list_type == 0:
         # 视频数据表类型 选择为全部
         key_prefix_list = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefixList')
@@ -44,7 +45,7 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
             if data_list_code == 1:
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
             else:
                 key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
             key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
@@ -68,7 +69,7 @@ def get_video_list(ab_exp_code, search_time, data_list_type, region_code, page_n
             if ab_exp_code not in ['139']:
                 key_data = None
             else:
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
                 key_data = redis_helper.get_all_data_from_zset(key_name=key_name, desc=True, with_scores=True)
         else:
             key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
@@ -130,6 +131,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
     # app_type = key_params.get('app_type')
     data_key = key_params.get('data_key')
     rule_key = key_params.get('rule_key')
+    rule_key_30day = key_params.get('30day_rule_key')
     if data_list_type == 0 and region_code == '0':
         # 视频数据表类型 和 地域 选择都为全部
         key_prefix_list = config_.VIDEO_DATA_LIST_MAPPING.get(data_list_type).get('keyPrefixList')
@@ -140,7 +142,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
             if data_list_code == 1:
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
                 rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
                 score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
                 if rank is None or score is None:
@@ -183,7 +185,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
             data_list_code = item.get('dataListCode')
             key_prefix = item.get('keyPrefix')
             if data_list_code == 1:
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
             else:
                 key_name = f"{key_prefix}{region_code}:{data_key}:{rule_key}:{search_time}"
             rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
@@ -210,7 +212,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
             if data_list_type == 1:
                 if ab_exp_code not in ['139']:
                     continue
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
             else:
                 key_name = f"{key_prefix}{code}:{data_key}:{rule_key}:{search_time}"
             rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
@@ -235,7 +237,7 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
             if ab_exp_code not in ['139']:
                 rank, score = None, None
             else:
-                key_name = f"{key_prefix}{data_key}:{rule_key}:{search_time_seg[0]}"
+                key_name = f"{key_prefix}{data_key}:{rule_key_30day}:{search_time_seg[0]}"
                 rank = redis_helper.get_rank_with_value(key_name=key_name, value=int(video_id), desc=True)
                 score = redis_helper.get_score_with_value(key_name=key_name, value=int(video_id))
         else:
@@ -264,4 +266,4 @@ def search_video(ab_exp_code, search_time, data_list_type, region_code, video_id
 
 
 if __name__ == '__main__':
-    get_video_list('095', '20220909.01', '0', '110000')
+    get_video_list('139', '20220909.01', 0, '110000')

+ 8 - 7
recommend.py

@@ -138,7 +138,7 @@ def positon_duplicate(pos1_vids, pos2_vids, videos):
 
 def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, algo_type, client_info,
                     expire_time=24*3600, ab_code=config_.AB_CODE['initial'], rule_key='', data_key='',
-                    no_op_flag=False, old_video_index=-1, video_id=None, params=None):
+                    no_op_flag=False, old_video_index=-1, video_id=None, params=None, rule_key_30day=None):
     """
     首页线上推荐逻辑
     :param request_id: request_id
@@ -179,7 +179,7 @@ def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, al
     pool_recall = PoolRecall(request_id=request_id,
                              app_type=app_type, mid=mid, uid=uid, ab_code=ab_code,
                              client_info=client_info, rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
-                             params=params)
+                             params=params, rule_key_30day=rule_key_30day)
     # _, last_rov_recall_key, _ = pool_recall.get_video_last_idx()
     # # 小时级实验
     # if ab_code in [code for _, code in config_.AB_CODE['rank_by_h'].items()]:
@@ -564,6 +564,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, page_type=0)
                     expire_time = 3600
                     rule_key = param.get('rule_key')
                     data_key = param.get('data_key')
+                    rule_key_30day = param.get('30day_rule_key')
                     no_op_flag = True
                     break
 
@@ -857,7 +858,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, page_type=0)
     #             data_key = 'data1'
     #             no_op_flag = True
 
-    return top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index
+    return top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day
 
 
 def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
@@ -923,7 +924,7 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
         return recommend_result
 
     # 普通mid推荐处理
-    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index = \
+    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day = \
         get_recommend_params(recommend_type=0, ab_exp_info=ab_exp_info, ab_info_data=ab_info_data)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
@@ -945,7 +946,7 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
                              ab_code=ab_code, expire_time=expire_time,
                              rule_key=rule_key, data_key=data_key,
                              no_op_flag=no_op_flag, old_video_index=old_video_index,
-                             params=params)
+                             params=params, rule_key_30day=rule_key_30day)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
     #     'request_id': request_id,
@@ -1010,7 +1011,7 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
         # return rank_result
 
     # 普通mid推荐处理
-    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index = \
+    top_K, flow_pool_P, ab_code, rule_key, data_key, expire_time, no_op_flag, old_video_index, rule_key_30day = \
         get_recommend_params(recommend_type=1, ab_exp_info=ab_exp_info, ab_info_data=ab_info_data, page_type=page_type)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
@@ -1032,7 +1033,7 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
                              ab_code=ab_code, expire_time=expire_time,
                              rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
                              old_video_index=old_video_index, video_id=video_id,
-                             params=params)
+                             params=params, rule_key_30day=rule_key_30day)
     # log_.info({
     #     'logTimestamp': int(time.time() * 1000),
     #     'request_id': request_id,

+ 7 - 6
video_recall.py

@@ -16,7 +16,7 @@ config_ = set_config()
 class PoolRecall(object):
     """召回"""
     def __init__(self, request_id, app_type, client_info=None, mid='', uid='', ab_code='',
-                 rule_key='', data_key='', no_op_flag=False, params=None):
+                 rule_key='', data_key='', no_op_flag=False, params=None, rule_key_30day=None):
         """
         初始化
         :param request_id: request_id
@@ -36,6 +36,7 @@ class PoolRecall(object):
         self.rule_key = rule_key
         self.data_key = data_key
         self.no_op_flag = no_op_flag
+        self.rule_key_30day = rule_key_30day
         self.redis_helper = RedisHelper(params=params)
 
     def copy_redis_zset_data(self, from_key_name, to_key_name):
@@ -1863,13 +1864,13 @@ class PoolRecall(object):
         # 判断当前日期的小时级列表是否更新
         now_date = datetime.today()
         now_dt = datetime.strftime(now_date, '%Y%m%d')
-        now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key}:{now_dt}"
+        now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key_30day}:{now_dt}"
         if self.redis_helper.key_exists(key_name=now_pool_recall_key):
             value = {'date': now_dt}
             self.redis_helper.set_data_to_redis(key_name=record_key, value=str(value), expire_time=expire_time)
         else:
             redis_dt = datetime.strftime(now_date - timedelta(days=1), '%Y%m%d')
-            now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key}:{redis_dt}"
+            now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key_30day}:{redis_dt}"
             value = {'date': redis_dt}
             self.redis_helper.set_data_to_redis(key_name=record_key, value=str(value), expire_time=expire_time)
         return now_pool_recall_key
@@ -1895,11 +1896,11 @@ class PoolRecall(object):
             now_dt = datetime.strftime(now_date, '%Y%m%d')
             if record_dt == now_dt:
                 # 已获取当前日期数据
-                pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key}:{now_dt}"
+                pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key_30day}:{now_dt}"
                 idx = self.get_video_idx(pool_recall_key=pool_recall_key, last_video_key=last_video_key)
             elif record_dt == datetime.strftime((now_date - timedelta(days=1)), '%Y%m%d'):
                 # 记录的dt - 当前dt = 1,判断当前h数据是否已更新
-                now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key}:{now_dt}"
+                now_pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key_30day}:{now_dt}"
                 if self.redis_helper.key_exists(key_name=now_pool_recall_key):
                     new_record = {'date': now_dt}
                     self.redis_helper.set_data_to_redis(key_name=record_key,
@@ -1909,7 +1910,7 @@ class PoolRecall(object):
                     self.redis_helper.del_keys(key_name=last_video_key)
                     pool_recall_key = now_pool_recall_key
                 else:
-                    pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key}:{record_dt}"
+                    pool_recall_key = f"{pool_key_prefix}:{self.data_key}:{self.rule_key_30day}:{record_dt}"
                     idx = self.get_video_idx(pool_recall_key=pool_recall_key, last_video_key=last_video_key)
             else:
                 idx = 0