From 6d41ce4c5b7491aa2186637963a7ccf65969cbdb Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Tue, 9 Jun 2026 19:48:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(mapper):=20=E4=BC=98=E5=85=88=E6=8C=89?= =?UTF-8?q?=E7=9B=B8=E4=BC=BC=E5=BA=A6=E6=8E=92=E5=BA=8F=E5=B9=B6=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E6=89=80=E6=9C=89=E5=AE=8C=E5=85=A8=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../headless/chat/mapper/HanlpDictMatchStrategy.java | 6 +++++- .../supersonic/headless/chat/mapper/MapFilter.java | 12 +++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/HanlpDictMatchStrategy.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/HanlpDictMatchStrategy.java index 139c23351..29a29b9b8 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/HanlpDictMatchStrategy.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/HanlpDictMatchStrategy.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -50,8 +51,11 @@ public class HanlpDictMatchStrategy extends SingleMatchStrategy return new ArrayList<>(); } // step3. merge pre/suffix result + // sort by similarity (desc) first, then name length (desc), so that + // higher-similarity records are inserted first and survive LinkedHashSet dedup hanlpMapResults = hanlpMapResults.stream() - .sorted((a, b) -> -(b.getName().length() - a.getName().length())) + .sorted(Comparator.comparingDouble(HanlpMapResult::getSimilarity).reversed() + .thenComparing((a, b) -> Integer.compare(b.getName().length(), a.getName().length()))) .collect(Collectors.toCollection(LinkedHashSet::new)); // step4. filter by similarity diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/MapFilter.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/MapFilter.java index aad8d10c4..5851fccfd 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/MapFilter.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/MapFilter.java @@ -123,15 +123,9 @@ public class MapFilter { .filter(SchemaElementMatch::isFullMatched).collect(Collectors.toList()); if (!fullMatches.isEmpty()) { - // If there are objects with similarity=1.0, choose the one with the longest - // detectWord and smallest offset - SchemaElementMatch bestMatch = fullMatches.stream() - .max(Comparator.comparing( - (SchemaElementMatch match) -> match.getDetectWord().length())) - .orElse(null); - if (bestMatch != null) { - result.add(bestMatch); - } + // Keep all records with similarity=1.0, as they may correspond to different + // elementIds with the same detectWord + result.addAll(fullMatches); } else { // If there are no objects with similarity=1.0, keep all objects with similarity<1.0 result.addAll(group);