task-11: Coze 结果合并前按稳定 rowKey HashSet 去重,消除 O(n²) 重复处理

This commit is contained in:
2026-08-29 16:17:12 +08:00
parent d64ba3a827
commit 3d085c1605
2 changed files with 351 additions and 1 deletions
@@ -1533,6 +1533,30 @@ public class SimilarAsinTaskService {
return index;
}
/**
* Task 11Coze 结果合并前按稳定 rowKey 一次性去重
* 优先 rowToken缺失时回退归一化的 legacy keyid::ASIN::country
* 保留首次出现顺序合并路径此前对每个重复行都重复 expand/分配/写回 O(n²) 热点
*/
List<SimilarAsinResultRowDto> dedupeRowsByRowKey(List<SimilarAsinResultRowDto> cozeRows) {
List<SimilarAsinResultRowDto> deduped = new ArrayList<>();
if (cozeRows == null || cozeRows.isEmpty()) {
return deduped;
}
Set<String> seenKeys = new java.util.HashSet<>();
for (SimilarAsinResultRowDto row : cozeRows) {
if (row == null) {
continue;
}
String key = rowKey(row);
if (key.isBlank() || !seenKeys.add(key)) {
continue;
}
deduped.add(row);
}
return deduped;
}
/**
* Task 10基于 rowKey 索引为 coze 回传行分配归属 chunk
* 命中索引 归属该 chunk未命中且有有效 fallbackchunkScopeHash + chunkIndex
@@ -3849,8 +3873,10 @@ public class SimilarAsinTaskService {
rowsByChunk.put(chunkKey, readChunkRows(chunk));
chunkByKey.put(chunkKey, chunk);
}
// Task 11合并前按稳定 rowKey 去重消除重复行逐行 expand/分配/写回 O(n²) 热点
List<SimilarAsinResultRowDto> uniqueRows = dedupeRowsByRowKey(cozeRows);
List<SimilarAsinResultRowDto> expandedAll = new ArrayList<>();
for (SimilarAsinResultRowDto resultRow : cozeRows) {
for (SimilarAsinResultRowDto resultRow : uniqueRows) {
expandedAll.addAll(expandRows(List.of(resultRow), allRowsByBaseId));
}
// Task 10先建 rowKey chunkKey 批量索引把逐 chunk 线性扫描降为 O(1) 查找