From 305bdd4dcfa183561b4fa4a2657ef0e914707a71 Mon Sep 17 00:00:00 2001 From: douxu Date: Fri, 3 Jul 2026 15:59:53 +0800 Subject: [PATCH] fix: suppress fallback recommendations when concrete hits exist - detect concrete recommend hits before normalizing results - drop fallback results when any syntax path returns real candidates - keep fallback candidates only when every path has no concrete hit --- model/redis_recommend.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/model/redis_recommend.go b/model/redis_recommend.go index 25d37e0..5299c96 100644 --- a/model/redis_recommend.go +++ b/model/redis_recommend.go @@ -124,6 +124,7 @@ func levelOneRedisSearch(ctx context.Context, rdb *redis.Client, hierarchy const func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchResult { rdb := diagram.GetRedisClientInstance() finalizeResults := func(results map[string]SearchResult) map[string]SearchResult { + results = suppressFallbackResultsWhenConcreteHitExists(results) return normalizeRecommendResults(input, results) } @@ -281,6 +282,27 @@ func RedisSearchRecommend(ctx context.Context, input string) map[string]SearchRe } } +func suppressFallbackResultsWhenConcreteHitExists(results map[string]SearchResult) map[string]SearchResult { + hasConcreteHit := false + for _, result := range results { + if result.Err == nil && !result.IsFallback && len(result.QueryDatas) > 0 { + hasConcreteHit = true + break + } + } + + if !hasConcreteHit { + return results + } + + for key, result := range results { + if result.IsFallback { + delete(results, key) + } + } + return results +} + func normalizeRecommendResults(input string, results map[string]SearchResult) map[string]SearchResult { for key, result := range results { if result.Err != nil {