فهرست منبع

素材新增阅读指标

luojunhui 1 روز پیش
والد
کامیت
9925158f88

+ 1 - 2
core/src/main/java/com/tzld/videoVector/job/MaterialQualitySyncJob.java

@@ -92,7 +92,6 @@ public class MaterialQualitySyncJob {
         List<MaterialQuality> rawList = new ArrayList<>();
         List<MaterialQuality> rawList = new ArrayList<>();
         String sql = buildOdpsSql(day30Ago, endDt, day7Ago, creativeStatus);
         String sql = buildOdpsSql(day30Ago, endDt, day7Ago, creativeStatus);
         log.info("ODPS SQL: {}", sql);
         log.info("ODPS SQL: {}", sql);
-        System.err.println("===== ODPS SQL =====\n" + sql + "\n====================");
 
 
         long odpsCount;
         long odpsCount;
         try {
         try {
@@ -301,7 +300,7 @@ public class MaterialQualitySyncJob {
         for (String part : param.split(",")) {
         for (String part : param.split(",")) {
             String[] kv = part.trim().split("=", 2);
             String[] kv = part.trim().split("=", 2);
             if (kv.length == 2 && kv[0].trim().equals(key)) {
             if (kv.length == 2 && kv[0].trim().equals(key)) {
-                try { return Double.parseDouble(kv[1].trim()); } catch (NumberFormatException e) { }
+                try { return Double.parseDouble(kv[1].trim()); } catch (NumberFormatException ignored) { }
             }
             }
         }
         }
         return defaultValue;
         return defaultValue;

+ 0 - 8
core/src/main/java/com/tzld/videoVector/model/po/pgVector/MaterialQuality.java

@@ -47,10 +47,6 @@ public class MaterialQuality {
     private Date createTime;
     private Date createTime;
     private Date updateTime;
     private Date updateTime;
 
 
-    // ===== 非持久化字段(召回时使用) =====
-    private Double sim;       // 余弦相似度
-    private Double finalScore; // sim + quality 加权分
-
     public Long getId() { return id; }
     public Long getId() { return id; }
     public void setId(Long id) { this.id = id; }
     public void setId(Long id) { this.id = id; }
     public String getMaterialId() { return materialId; }
     public String getMaterialId() { return materialId; }
@@ -103,8 +99,4 @@ public class MaterialQuality {
     public void setCreateTime(Date createTime) { this.createTime = createTime; }
     public void setCreateTime(Date createTime) { this.createTime = createTime; }
     public Date getUpdateTime() { return updateTime; }
     public Date getUpdateTime() { return updateTime; }
     public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
     public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }
-    public Double getSim() { return sim; }
-    public void setSim(Double sim) { this.sim = sim; }
-    public Double getFinalScore() { return finalScore; }
-    public void setFinalScore(Double finalScore) { this.finalScore = finalScore; }
 }
 }

+ 2 - 4
core/src/main/java/com/tzld/videoVector/service/impl/MaterialSearchServiceImpl.java

@@ -1,7 +1,6 @@
 package com.tzld.videoVector.service.impl;
 package com.tzld.videoVector.service.impl;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.tzld.videoVector.common.constant.VectorConstants;
 import com.tzld.videoVector.dao.mapper.pgVector.DeconstructContentMapper;
 import com.tzld.videoVector.dao.mapper.pgVector.DeconstructContentMapper;
 import com.tzld.videoVector.dao.mapper.pgVector.DeconstructVectorConfigMapper;
 import com.tzld.videoVector.dao.mapper.pgVector.DeconstructVectorConfigMapper;
 import com.tzld.videoVector.dao.mapper.pgVector.ext.ContentVectorMapperExt;
 import com.tzld.videoVector.dao.mapper.pgVector.ext.ContentVectorMapperExt;
@@ -336,7 +335,7 @@ public class MaterialSearchServiceImpl implements MaterialSearchService {
         // —— 视频 ——
         // —— 视频 ——
         List<VideoMatch> videoCandidates = vectorStoreService.searchTopN(configCode, queryVector, candidateSize);
         List<VideoMatch> videoCandidates = vectorStoreService.searchTopN(configCode, queryVector, candidateSize);
         if (videoCandidates != null && !videoCandidates.isEmpty()) {
         if (videoCandidates != null && !videoCandidates.isEmpty()) {
-            allItems.addAll(buildModalityItems(configCode, "VIDEO", videoCandidates, topN, alpha, simMin));
+            allItems.addAll(buildModalityItems(configCode, "VIDEO", videoCandidates, topN, simMin));
             log.info("视频召回: 候选 {} 条, 返回", videoCandidates.size());
             log.info("视频召回: 候选 {} 条, 返回", videoCandidates.size());
         }
         }
 
 
@@ -369,7 +368,7 @@ public class MaterialSearchServiceImpl implements MaterialSearchService {
     /** 视频/长文:仅用 sim 评分(质量分暂无) */
     /** 视频/长文:仅用 sim 评分(质量分暂无) */
     private <T> List<ScoredMaterial> buildModalityItems(String configCode, String modality,
     private <T> List<ScoredMaterial> buildModalityItems(String configCode, String modality,
                                                          List<T> candidates, int topN,
                                                          List<T> candidates, int topN,
-                                                         double alpha, double simMin) {
+                                                         double simMin) {
         List<ScoredMaterial> list = new ArrayList<>();
         List<ScoredMaterial> list = new ArrayList<>();
         for (T m : candidates) {
         for (T m : candidates) {
             double sim = getMatchScore(m);
             double sim = getMatchScore(m);
@@ -685,7 +684,6 @@ public class MaterialSearchServiceImpl implements MaterialSearchService {
         return result.isEmpty() ? null : result;
         return result.isEmpty() ? null : result;
     }
     }
 
 
-    @SuppressWarnings("unchecked")
     private void extractPointNames(JSONObject json, Map<String, Object> result, String key) {
     private void extractPointNames(JSONObject json, Map<String, Object> result, String key) {
         Object val = json.get(key);
         Object val = json.get(key);
         if (val instanceof com.alibaba.fastjson.JSONArray) {
         if (val instanceof com.alibaba.fastjson.JSONArray) {

+ 7 - 10
core/src/main/java/com/tzld/videoVector/service/recall/impl/VectorRecallTestServiceImpl.java

@@ -42,7 +42,6 @@ import com.tzld.videoVector.service.VideoSearchService;
 import com.tzld.videoVector.service.recall.VectorRecallTestService;
 import com.tzld.videoVector.service.recall.VectorRecallTestService;
 import com.tzld.videoVector.util.Md5Util;
 import com.tzld.videoVector.util.Md5Util;
 import com.tzld.videoVector.util.RedisUtils;
 import com.tzld.videoVector.util.RedisUtils;
-import com.tzld.videoVector.util.VectorUtils;
 import com.tzld.videoVector.model.po.pgVector.ArticleVector;
 import com.tzld.videoVector.model.po.pgVector.ArticleVector;
 import com.tzld.videoVector.model.po.pgVector.MaterialVector;
 import com.tzld.videoVector.model.po.pgVector.MaterialVector;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -979,9 +978,9 @@ public class VectorRecallTestServiceImpl implements VectorRecallTestService {
                 raw.getString("usageCount"),
                 raw.getString("usageCount"),
                 raw.getString("使用次数")
                 raw.getString("使用次数")
         );
         );
-        meta.tags = extractStringList(raw, "target_post", "tags");
+        meta.tags = extractStringList(raw, "target_post");
         if (meta.tags == null) {
         if (meta.tags == null) {
-            meta.tags = extractStringList(raw, null, "tags");
+            meta.tags = extractStringList(raw, null);
         }
         }
         if (meta.tags == null) {
         if (meta.tags == null) {
             String tagsStr = firstNonBlankString(raw.getString("标签"), nestedString(raw, "target_post", "label"));
             String tagsStr = firstNonBlankString(raw.getString("标签"), nestedString(raw, "target_post", "label"));
@@ -998,14 +997,13 @@ public class VectorRecallTestServiceImpl implements VectorRecallTestService {
         return meta;
         return meta;
     }
     }
 
 
-    private List<String> extractStringList(JSONObject raw, String objKey, String fieldKey) {
-        JSONArray arr = objKey != null ? nestedArray(raw, objKey, fieldKey) : raw.getJSONArray(fieldKey);
+    private List<String> extractStringList(JSONObject raw, String objKey) {
+        JSONArray arr = objKey != null ? nestedArray(raw, objKey, "tags") : raw.getJSONArray("tags");
         if (arr == null || arr.isEmpty()) {
         if (arr == null || arr.isEmpty()) {
             return null;
             return null;
         }
         }
         List<String> list = new ArrayList<>(arr.size());
         List<String> list = new ArrayList<>(arr.size());
-        for (int i = 0; i < arr.size(); i++) {
-            Object item = arr.get(i);
+        for (Object item : arr) {
             if (item == null) {
             if (item == null) {
                 continue;
                 continue;
             }
             }
@@ -1445,6 +1443,7 @@ public class VectorRecallTestServiceImpl implements VectorRecallTestService {
                         continue;
                         continue;
                     }
                     }
                     try {
                     try {
+                        @SuppressWarnings("unchecked")
                         Map<String, Object> detail = JSONObject.parseObject(json, Map.class);
                         Map<String, Object> detail = JSONObject.parseObject(json, Map.class);
                         if (detail != null && !detail.isEmpty()) {
                         if (detail != null && !detail.isEmpty()) {
                             results.get(i).setVideoDetail(detail);
                             results.get(i).setVideoDetail(detail);
@@ -1904,8 +1903,7 @@ public class VectorRecallTestServiceImpl implements VectorRecallTestService {
                 return Collections.emptyList();
                 return Collections.emptyList();
             }
             }
             List<String> result = new ArrayList<>(arr.size());
             List<String> result = new ArrayList<>(arr.size());
-            for (int i = 0; i < arr.size(); i++) {
-                Object item = arr.get(i);
+            for (Object item : arr) {
                 if (item == null) {
                 if (item == null) {
                     continue;
                     continue;
                 }
                 }
@@ -1954,7 +1952,6 @@ public class VectorRecallTestServiceImpl implements VectorRecallTestService {
         String articleId;
         String articleId;
         String title;
         String title;
         String summary;
         String summary;
-        List<String> tags;
         String cover;
         String cover;
         String url;
         String url;
         String source;
         String source;

+ 3 - 4
core/src/main/java/com/tzld/videoVector/util/MaterialQualityCalculator.java

@@ -21,7 +21,6 @@ public class MaterialQualityCalculator {
     private static final double W_ROI = 0.20;
     private static final double W_ROI = 0.20;
 
 
     // 置信度相关
     // 置信度相关
-    private static final double DEFAULT_COST_THRESHOLD = 50.0;  // 7天消耗阈值
     private static final double DEFAULT_PRIOR = 0.5;            // 贝叶斯先验分
     private static final double DEFAULT_PRIOR = 0.5;            // 贝叶斯先验分
 
 
     /**
     /**
@@ -94,8 +93,8 @@ public class MaterialQualityCalculator {
 
 
             if (dv.roi <= 0 && dv.cost7d > 0) {
             if (dv.roi <= 0 && dv.cost7d > 0) {
                 double redist = W_ROI / (W_CTR + W_VIRAL);
                 double redist = W_ROI / (W_CTR + W_VIRAL);
-                wCtr += W_ROI * redist;
-                wViral += W_ROI * redist;
+                wCtr += W_CTR * redist;
+                wViral += W_VIRAL * redist;
                 wRoi = 0;
                 wRoi = 0;
             }
             }
 
 
@@ -141,7 +140,7 @@ public class MaterialQualityCalculator {
         for (int i = 0; i < n; ) {
         for (int i = 0; i < n; ) {
             double val = getter.extract(sorted.get(i));
             double val = getter.extract(sorted.get(i));
             int j = i;
             int j = i;
-            while (j < n && getter.extract(sorted.get(j)) == val) {
+            while (j < n && Double.compare(getter.extract(sorted.get(j)), val) == 0) {
                 j++;
                 j++;
             }
             }
             // [i, j) 区间内的值相同,取平均 rank
             // [i, j) 区间内的值相同,取平均 rank

+ 2 - 5
core/src/main/java/com/tzld/videoVector/util/OdpsUtil.java

@@ -47,7 +47,7 @@ public class OdpsUtil {
             i.waitForSuccess();
             i.waitForSuccess();
             return SQLTask.getResult(i);
             return SQLTask.getResult(i);
         } catch (OdpsException e) {
         } catch (OdpsException e) {
-            e.printStackTrace();
+            log.error("ODPS 查询失败: {}", e.getMessage(), e);
         }
         }
         return null;
         return null;
     }
     }
@@ -78,15 +78,12 @@ public class OdpsUtil {
 
 
             long processed = 0;
             long processed = 0;
             // getRecordCount() 在某些ODPS版本可能返回0(已知问题),不提前退出,直接尝试读取
             // getRecordCount() 在某些ODPS版本可能返回0(已知问题),不提前退出,直接尝试读取
-            TunnelRecordReader reader = session.openRecordReader(0, Math.max(totalCount, 1));
-            try {
+            try (TunnelRecordReader reader = session.openRecordReader(0, Math.max(totalCount, 1))) {
                 Record record;
                 Record record;
                 while ((record = reader.read()) != null) {
                 while ((record = reader.read()) != null) {
                     recordConsumer.accept(record);
                     recordConsumer.accept(record);
                     processed++;
                     processed++;
                 }
                 }
-            } finally {
-                reader.close();
             }
             }
 
 
             log.info("InstanceTunnel 流式读取完成,实际处理: {} 条", processed);
             log.info("InstanceTunnel 流式读取完成,实际处理: {} 条", processed);