linfan 1 ano atrás
pai
commit
819c2335eb
3 arquivos alterados com 59 adições e 4 exclusões
  1. 29 2
      recommend.py
  2. 5 2
      video_rank.py
  3. 25 0
      video_recall.py

+ 29 - 2
recommend.py

@@ -372,13 +372,38 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
 
     if app_type in [config_.APP_TYPE['LAO_HAO_KAN_VIDEO'], config_.APP_TYPE['ZUI_JING_QI']]:
         t = [gevent.spawn(pool_recall.rov_pool_recall_with_region, size, expire_time)]
+        if ab_code == 60052:
+            t.append(gevent.spawn(pool_recall.get_sim_hot_item_reall_filter))
     else:
         t = [gevent.spawn(pool_recall.rov_pool_recall_with_region, size, expire_time),
              gevent.spawn(pool_recall.flow_pool_recall, size, config_.QUICK_FLOW_POOL_ID),
              gevent.spawn(pool_recall.flow_pool_recall, size)]
+        if ab_code == 60052:
+            t.append(gevent.spawn(pool_recall.get_sim_hot_item_reall_filter))
 
     gevent.joinall(t)
     recall_result_list = [i.get() for i in t]
+    if len(recall_result_list)<0:
+        result['recallResult']= []
+        result['rankResult'] = []
+        return result
+    if ab_code == 60052:
+        rov_pool_recall = []
+        if len(recall_result_list)>=4:
+            region_recall = recall_result_list[0]
+            sim_recall = recall_result_list[3]
+            now_video_ids = set('')
+            for video in region_recall:
+                video_id = video.get('videoId')
+                if video_id not in now_video_ids:
+                    rov_pool_recall.append(video)
+                    now_video_ids.add(video_id)
+            for video in sim_recall:
+                video_id = video.get('videoId')
+                if video_id not in now_video_ids:
+                    rov_pool_recall.append(video)
+                    now_video_ids.add(video_id)
+            recall_result_list[0] = rov_pool_recall
 
     result['recallResult'] = recall_result_list
     result['recallTime'] = (time.time() - start_recall) * 1000
@@ -420,7 +445,7 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
             }
     #if ab_code=="ab_new_test":
     #print("before data:", data)
-    rank_result = video_new_rank2(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P))
+    rank_result = video_new_rank2(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P), ab_code=ab_code)
     #print(rank_result)
 
     result['rankResult'] = rank_result
@@ -485,6 +510,8 @@ def new_video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
              gevent.spawn(pool_recall.get_selected_recall, size, region_code),
              gevent.spawn(pool_recall.get_no_selected_recall, size, region_code)
              ]
+        if ab_code == 60049:
+            t.append(gevent.spawn(pool_recall.get_sim_hot_item_reall))
     else:
         t = [
              gevent.spawn(pool_recall.get_region_hour_recall, size, region_code),
@@ -1548,7 +1575,7 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
                                  old_video_index=old_video_index, video_id=video_id,
                                  params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
         # log_.info({
-    elif ab_code == 60050 or ab_code == 60051:
+    elif ab_code == 60050 or ab_code == 60051 or ab_code == 60052:
         result = video_old_recommend(request_id=request_id,
                                  mid=mid, uid=uid, app_type=app_type,
                                  size=size, top_K=top_K, flow_pool_P=flow_pool_P,

+ 5 - 2
video_rank.py

@@ -592,7 +592,7 @@ def video_rank_with_old_video(rank_result, old_video_recall, size, top_K, old_vi
     return new_rank_result[:size]
 
 
-def video_new_rank2(data, size, top_K, flow_pool_P):
+def video_new_rank2(data, size, top_K, flow_pool_P, ab_code):
     """
         视频分发排序
         :param data: 各路召回的视频 type-dict {'rov_pool_recall': [], 'flow_pool_recall': []}
@@ -607,11 +607,14 @@ def video_new_rank2(data, size, top_K, flow_pool_P):
     redisObj = RedisHelper()
     vidKeys = []
     recall_list = []
+    pre_str = "k_p:"
+    if ab_code==60051:
+        pre_str = "k_p2:"
     for recall_item in data['rov_pool_recall']:
         if len(recall_item)<=0:
             continue
         vid = recall_item.get("videoId",0)
-        vidKeys.append("k_p:" + str(vid))
+        vidKeys.append(pre_str+ str(vid))
         recall_list.append(recall_item)
     #print("vidKeys:", vidKeys)
     video_scores = redisObj.get_batch_key(vidKeys)

+ 25 - 0
video_recall.py

@@ -2124,6 +2124,31 @@ class PoolRecall(object):
                 )
         return recall_result[:200]
 
+    def get_sim_hot_item_reall_filter(self):
+        recall_key = "sim_hot_" + str(self.video_id)
+        # print("recall_key:", recall_key)
+        data = self.redis_helper.get_data_from_redis(key_name=recall_key)
+
+        # print(data)
+        recall_result = []
+        recall_dict  = {}
+        video_ids = []
+        if data is not None:
+            json_result = json.loads(data)
+            # print("json_result:", json_result)
+            for per_item in json_result:
+                video_ids.append(per_item[0])
+                recall_dict[per_item[0]] = {'videoId': per_item[0], 'flowPool': '',
+                     'rovScore': per_item[1], 'pushFrom': config_.PUSH_FROM['sim_hot_vid_recall'],
+                     'abCode': self.ab_code}
+
+        filter_ = FilterVideos(request_id=self.request_id,
+                               app_type=self.app_type, mid=self.mid, uid=self.uid, video_ids=video_ids[:50])
+        filtered_viewed_videos = filter_.filter_videos
+        for vid in filtered_viewed_videos:
+            if vid in recall_dict:
+                recall_result.append(recall_dict[vid])
+        return recall_result
     # get region_hour_recall
     def get_region_hour_recall(self, size=4, region_code='-1'):
         pool_key_prefix = config_.RECALL_KEY_NAME_PREFIX_REGION_BY_H