Просмотр исходного кода

priorScene 池新增 sceneSumRov 质量过滤;rov/sceneSumRov 三处阈值统一调整为 0.03(原 DEMAND_MIN_ROV=0.02、搜索白名单 rov>=0.02、新加 PRIOR_SCENE_MIN_SUM_ROV 初定 0.05),口径对齐避免歧义。涉及 prior/posterior 池 rov 过滤、priorScene 场景关联弱视频砍掉、搜索白名单 SQL 阈值。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
刘立冬 15 часов назад
Родитель
Сommit
05bca2c4cc

+ 1 - 1
api-module/src/main/java/com/tzld/piaoquan/api/dao/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.java

@@ -63,7 +63,7 @@ public interface ContentPlatformDemandVideoMapperExt {
     List<String> selectDistinctCrowdPackages(@Param("dt") String dt, @Param("channelName") String channelName);
     List<String> selectDistinctCrowdPackages(@Param("dt") String dt, @Param("channelName") String channelName);
 
 
     /**
     /**
-     * 搜索候选白名单:dt 最新分区下,该入口(channel + 入口维度)demand_strategy IN ('人群需求', '优质相似') 且 rov >= 0.02 的视频行。
+     * 搜索候选白名单:dt 最新分区下,该入口(channel + 入口维度)demand_strategy IN ('人群需求', '优质相似') 且 rov >= 0.03 的视频行。
      * crowdSegment == "泛人群" 时翻译成 (NULL OR ''/'-'/'null'),与 selectForRecommend 一致。
      * crowdSegment == "泛人群" 时翻译成 (NULL OR ''/'-'/'null'),与 selectForRecommend 一致。
      * ORDER BY rov DESC, id ASC,便于上层 putIfAbsent 直接取 max rov 代表行。
      * ORDER BY rov DESC, id ASC,便于上层 putIfAbsent 直接取 max rov 代表行。
      * 小程序投流:crowdSegment=#{crowdPackage},channelLevel3=null
      * 小程序投流:crowdSegment=#{crowdPackage},channelLevel3=null

+ 9 - 8
api-module/src/main/java/com/tzld/piaoquan/api/service/contentplatform/impl/ContentPlatformPlanServiceImpl.java

@@ -639,10 +639,10 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
     private static final String MATCH_METHOD_PRIOR_SCENE = "场景已看视频";
     private static final String MATCH_METHOD_PRIOR_SCENE = "场景已看视频";
     /** match_method 取值,prior / posterior 池识别用 */
     /** match_method 取值,prior / posterior 池识别用 */
     private static final String MATCH_METHOD_PRIOR = "视频库_解构特征_向量相似匹配";
     private static final String MATCH_METHOD_PRIOR = "视频库_解构特征_向量相似匹配";
-    /** prior/posterior 池视频近 7 日 rov 下限(质量过滤):0.02 在 prior 池 0513 全量保留 ~41%,
-     * cdjh 优质相似 0514 验证保留 ~54%,量大有意义;
-     * priorScene 池基数小(单 channel 几十~百条),仍保持 >0(在 groupAndTopK 内兜底)。 */
-    private static final double DEMAND_MIN_ROV = 0.02;
+    /** prior/posterior 池视频近 7 日 rov 下限(质量过滤):统一与 priorScene sceneSumRov 一致,0.03。 */
+    private static final double DEMAND_MIN_ROV = 0.03;
+    /** priorScene 池(场景已看视频)的 sceneSumRov 下限(质量过滤):与 rov 下限同口径 0.03。 */
+    private static final double PRIOR_SCENE_MIN_SUM_ROV = 0.03;
     /** channel_name 映射:企微/小程序 type 直推,公众号入口按 ghName 反查 demand 表(见 resolveChannelName)。 */
     /** channel_name 映射:企微/小程序 type 直推,公众号入口按 ghName 反查 demand 表(见 resolveChannelName)。 */
     private static final String CHANNEL_NAME_QW           = "群/企微合作-稳定";
     private static final String CHANNEL_NAME_QW           = "群/企微合作-稳定";
     private static final String CHANNEL_NAME_XCX          = "小程序投流-稳定";
     private static final String CHANNEL_NAME_XCX          = "小程序投流-稳定";
@@ -1031,10 +1031,11 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
             if (r.getVideoId() == null) continue;
             if (r.getVideoId() == null) continue;
             bestPerVideo.putIfAbsent(r.getVideoId(), r);
             bestPerVideo.putIfAbsent(r.getVideoId(), r);
         }
         }
-        // 2. 过滤 rov<=0/null
+        // 2. 过滤 rov<=0/null,以及 sceneSumRov < PRIOR_SCENE_MIN_SUM_ROV(场景关联弱视频砍掉)
         List<ContentPlatformDemandVideo> filtered = new ArrayList<>(bestPerVideo.size());
         List<ContentPlatformDemandVideo> filtered = new ArrayList<>(bestPerVideo.size());
         for (ContentPlatformDemandVideo r : bestPerVideo.values()) {
         for (ContentPlatformDemandVideo r : bestPerVideo.values()) {
             if (r.getRov() == null || r.getRov() <= 0) continue;
             if (r.getRov() == null || r.getRov() <= 0) continue;
+            if (r.getSceneSumRov() == null || r.getSceneSumRov() < PRIOR_SCENE_MIN_SUM_ROV) continue;
             filtered.add(r);
             filtered.add(r);
         }
         }
         // 3. 按 sceneSumRov DESC 排序,次级 total_rov DESC
         // 3. 按 sceneSumRov DESC 排序,次级 total_rov DESC
@@ -1174,7 +1175,7 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
                     dt, channelName, null, DEMAND_STRATEGY_POSTERIOR, null, null, null, ghName, null, category, MATCH_METHOD_PRIOR, crowdPackage, fetchLimit, true);
                     dt, channelName, null, DEMAND_STRATEGY_POSTERIOR, null, null, null, ghName, null, category, MATCH_METHOD_PRIOR, crowdPackage, fetchLimit, true);
         }
         }
 
 
-        // 近 7 日 rov 下限,与 prior 池一致(cdjh 0514 验证 ≥0.02 保留 ~54%)
+        // 近 7 日 rov 下限,与 prior 池一致(DEMAND_MIN_ROV,统一到 0.03)
         rows = rows.stream()
         rows = rows.stream()
                 .filter(r -> r.getRov() != null && r.getRov() >= DEMAND_MIN_ROV)
                 .filter(r -> r.getRov() != null && r.getRov() >= DEMAND_MIN_ROV)
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
@@ -2023,13 +2024,13 @@ public class ContentPlatformPlanServiceImpl implements ContentPlatformPlanServic
     }
     }
 
 
     /**
     /**
-     * 搜索:在当前入口的 demand 白名单(rov >= 0.02)内做 title LIKE 关键字命中,按 rov DESC 排序。
+     * 搜索:在当前入口的 demand 白名单(rov >= 0.03)内做 title LIKE 关键字命中,按 rov DESC 排序。
      * 门控:
      * 门控:
      *   - 用户身份 type ∈ {2 自营, 3 代理},否则返回空
      *   - 用户身份 type ∈ {2 自营, 3 代理},否则返回空
      *   - 渠道 ∈ {小程序投流-稳定, 公众号投流-稳定},否则返回空
      *   - 渠道 ∈ {小程序投流-稳定, 公众号投流-稳定},否则返回空
      *   - 小程序投流必填 crowdPackage,公众号投流必填 ghName,否则返回空
      *   - 小程序投流必填 crowdPackage,公众号投流必填 ghName,否则返回空
      * 流程:
      * 流程:
-     *   1. demand 白名单(channel + crowdSegment/channelLevel3 + demand_strategy IN (人群需求,优质相似) + rov>=0.02)
+     *   1. demand 白名单(channel + crowdSegment/channelLevel3 + demand_strategy IN (人群需求,优质相似) + rov>=0.03)
      *      SQL 已 ORDER BY rov DESC, id ASC
      *      SQL 已 ORDER BY rov DESC, id ASC
      *   2. 同 video_id 去重:putIfAbsent 取 max rov 代表行 —— 与搜索 rov DESC 排序对齐,
      *   2. 同 video_id 去重:putIfAbsent 取 max rov 代表行 —— 与搜索 rov DESC 排序对齐,
      *      与 priorScene 池(取 max sceneSumRov 代表行)有意区别;同 dt 内稳定,跨 dt 重灌可能换代表行。
      *      与 priorScene 池(取 max sceneSumRov 代表行)有意区别;同 dt 内稳定,跨 dt 重灌可能换代表行。

+ 1 - 1
api-module/src/main/resources/mapper/contentplatform/ext/ContentPlatformDemandVideoMapperExt.xml

@@ -175,7 +175,7 @@
           AND demand_strategy IN ('人群需求', '优质相似')
           AND demand_strategy IN ('人群需求', '优质相似')
           AND video_id IS NOT NULL
           AND video_id IS NOT NULL
           AND rov IS NOT NULL
           AND rov IS NOT NULL
-          AND rov &gt;= 0.02
+          AND rov &gt;= 0.03
         <if test="crowdSegment != null and crowdSegment != ''">
         <if test="crowdSegment != null and crowdSegment != ''">
             <choose>
             <choose>
                 <when test='crowdSegment == "泛人群"'>
                 <when test='crowdSegment == "泛人群"'>