|
|
@@ -8,14 +8,11 @@ import com.tzld.videoVector.dao.mapper.pgVector.ChannelDemandMatchResultMapper;
|
|
|
import com.tzld.videoVector.dao.mapper.pgVector.DeconstructContentMapper;
|
|
|
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.VideoDeconstructResultMapperExt;
|
|
|
import com.tzld.videoVector.model.entity.DeconstructResult;
|
|
|
import com.tzld.videoVector.model.entity.VideoDetail;
|
|
|
import com.tzld.videoVector.model.entity.VideoMatch;
|
|
|
-import com.tzld.videoVector.model.param.ChannelDemandMatchQueryParam;
|
|
|
-import com.tzld.videoVector.model.param.DeconstructParam;
|
|
|
-import com.tzld.videoVector.model.param.GetDeconstructParam;
|
|
|
-import com.tzld.videoVector.model.param.MatchTopNVideoParam;
|
|
|
-import com.tzld.videoVector.model.param.RecallVideoScoreParam;
|
|
|
+import com.tzld.videoVector.model.param.*;
|
|
|
import com.tzld.videoVector.model.po.pgVector.*;
|
|
|
import com.tzld.videoVector.model.vo.ChannelDemandMatchVO;
|
|
|
import com.tzld.videoVector.model.vo.RecallVideoScoreVO;
|
|
|
@@ -65,6 +62,9 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
@Resource
|
|
|
private DeconstructVectorConfigMapper deconstructVectorConfigMapper;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private VideoDeconstructResultMapperExt videoDeconstructResultMapperExt;
|
|
|
+
|
|
|
@Resource
|
|
|
private RedisUtils redisUtils;
|
|
|
|
|
|
@@ -1076,7 +1076,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
* "目的点": [...], "目的点-实质": [...]
|
|
|
* }
|
|
|
*
|
|
|
- * 数据来源:script/sync_decode_to_redis.py 同步,Key: recall:vid_decode:{videoId}
|
|
|
+ * 数据来源:Redis recall:vid_decode:{videoId}
|
|
|
*/
|
|
|
private void enrichDeconstruct(List<VideoMatchResult> results) {
|
|
|
if (results == null || results.isEmpty()) {
|
|
|
@@ -1084,15 +1084,27 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
- List<String> keys = results.stream()
|
|
|
- .map(r -> VectorConstants.VID_DECODE_KEY_PREFIX + r.getVideoId())
|
|
|
+ List<Long> videoIds = results.stream()
|
|
|
+ .map(VideoMatchResult::getVideoId)
|
|
|
+ .filter(Objects::nonNull)
|
|
|
.collect(Collectors.toList());
|
|
|
+ if (videoIds.isEmpty()) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ // 从 Redis 批量获取解构缓存
|
|
|
+ List<String> keys = videoIds.stream()
|
|
|
+ .map(id -> VectorConstants.VID_DECODE_KEY_PREFIX + id)
|
|
|
+ .collect(Collectors.toList());
|
|
|
List<String> values = redisUtils.mGet(keys);
|
|
|
+ if (values == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
for (int i = 0; i < results.size(); i++) {
|
|
|
- String json = values.get(i);
|
|
|
- if (json == null) {
|
|
|
+ VideoMatchResult r = results.get(i);
|
|
|
+ String json = (i < values.size()) ? values.get(i) : null;
|
|
|
+ if (!StringUtils.hasText(json)) {
|
|
|
continue;
|
|
|
}
|
|
|
try {
|
|
|
@@ -1100,7 +1112,6 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
if (deconstructFlat == null || deconstructFlat.isEmpty()) {
|
|
|
continue;
|
|
|
}
|
|
|
- VideoMatchResult r = results.get(i);
|
|
|
Map<String, Object> detail = r.getVideoDetail();
|
|
|
if (detail == null) {
|
|
|
detail = new HashMap<>();
|
|
|
@@ -1108,7 +1119,7 @@ public class VideoSearchServiceImpl implements VideoSearchService {
|
|
|
}
|
|
|
detail.put("deconstruct", deconstructFlat);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("解析视频解构失败,videoId={}: {}", results.get(i).getVideoId(), e.getMessage());
|
|
|
+ log.error("解析视频解构失败,videoId={}: {}", r.getVideoId(), e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
} catch (Exception e) {
|