|
|
@@ -1389,7 +1389,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
if (param == null) {
|
|
|
log.error("recallWithScore 参数为空");
|
|
|
return emptyScoreResult(VectorUtils.DEFAULT_ALPHA, VectorUtils.DEFAULT_ROV_P95,
|
|
|
- VectorUtils.DEFAULT_ROV_P5, VectorUtils.DEFAULT_SIM_MIN);
|
|
|
+ VectorUtils.DEFAULT_ROV_P5, VectorUtils.DEFAULT_SIM_MIN, null);
|
|
|
}
|
|
|
|
|
|
// 解析评分参数,使用默认值
|
|
|
@@ -1397,6 +1397,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
double rovP95 = param.getRovP95() != null ? param.getRovP95() : VectorUtils.DEFAULT_ROV_P95;
|
|
|
double rovP5 = param.getRovP5() != null ? param.getRovP5() : VectorUtils.DEFAULT_ROV_P5;
|
|
|
double simMin = param.getSimMin() != null ? param.getSimMin() : VectorUtils.DEFAULT_SIM_MIN;
|
|
|
+ Double rovMin = param.getRovMin();
|
|
|
|
|
|
// 1. 复用现有 matchTopNVideo 进行向量召回
|
|
|
MatchTopNVideoParam matchParam = new MatchTopNVideoParam();
|
|
|
@@ -1410,7 +1411,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
List<VideoMatchResult> rawMatches = matchTopNVideo(matchParam, true);
|
|
|
if (rawMatches == null || rawMatches.isEmpty()) {
|
|
|
log.info("recallWithScore: 召回结果为空");
|
|
|
- return emptyScoreResult(alpha, rovP95, rovP5, simMin);
|
|
|
+ return emptyScoreResult(alpha, rovP95, rovP5, simMin, rovMin);
|
|
|
}
|
|
|
|
|
|
// 2. 对每条结果计算综合评分
|
|
|
@@ -1428,10 +1429,16 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
if (sim < simMin) {
|
|
|
continue;
|
|
|
}
|
|
|
- item.setSim(sim);
|
|
|
|
|
|
- // 从 videoDetail 中提取 rov
|
|
|
+ // rov 从 videoDetail 中提取
|
|
|
double rov = extractRov(match.getVideoDetail());
|
|
|
+
|
|
|
+ // rovMin 限制,低于rovMin的结果直接过滤(为空则不限制)
|
|
|
+ if (rovMin != null && (rov == 0 && rov < rovMin)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ item.setSim(sim);
|
|
|
item.setRov(rov);
|
|
|
|
|
|
// sim 归一化
|
|
|
@@ -1465,6 +1472,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
scoreParams.setRovP95(rovP95);
|
|
|
scoreParams.setRovP5(rovP5);
|
|
|
scoreParams.setSimMin(simMin);
|
|
|
+ scoreParams.setRovMin(rovMin);
|
|
|
scoreParams.setSimMax(VectorUtils.DEFAULT_SIM_MAX);
|
|
|
vo.setScoreParams(scoreParams);
|
|
|
|
|
|
@@ -1504,7 +1512,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
/**
|
|
|
* 构建空的评分结果
|
|
|
*/
|
|
|
- private RecallVideoScoreVO emptyScoreResult(double alpha, double rovP95, double rovP5, double simMin) {
|
|
|
+ private RecallVideoScoreVO emptyScoreResult(double alpha, double rovP95, double rovP5, double simMin, Double rovMin) {
|
|
|
RecallVideoScoreVO vo = new RecallVideoScoreVO();
|
|
|
vo.setItems(Collections.emptyList());
|
|
|
vo.setTotal(0);
|
|
|
@@ -1513,6 +1521,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
scoreParams.setRovP95(rovP95);
|
|
|
scoreParams.setRovP5(rovP5);
|
|
|
scoreParams.setSimMin(simMin);
|
|
|
+ scoreParams.setRovMin(rovMin);
|
|
|
scoreParams.setSimMax(VectorUtils.DEFAULT_SIM_MAX);
|
|
|
vo.setScoreParams(scoreParams);
|
|
|
return vo;
|