From 5a2be87f658d01bc5b3b7ecdba92ac69bf09dcf7 Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Thu, 03 Sep 2026 15:15:37 +0800
Subject: [PATCH] fix(search): 搜索准确性四连修——FTS5 MATCH 引号包裹(连字符不再被解析成 MINUS);KeywordSearch 截断按命中关键词数排序(高频 bigram 不再挤出强相关文档);原词奖励档(完整短语压过泛化 bigram);tags 字段真实参与评分(此前误用 Section)

---
 internal/search/scorer.go |   40 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 1 deletions(-)

diff --git a/internal/search/scorer.go b/internal/search/scorer.go
index ae676b4..a3b4e3f 100644
--- a/internal/search/scorer.go
+++ b/internal/search/scorer.go
@@ -11,6 +11,13 @@
 	"可以", "需要", "应该", "是否", "有没有",
 }
 
+// EntityWords 实体词列表(进一步降低权重,因为这些词会匹配大量文件)
+var EntityWords = []string{
+	"智能枪", "电子秤", "智能阀", "艾信盒子",
+	"电子秤平台", "运营管理平台", "易配送", "lpg",
+	"安全用气", "艾信助手", "艾信发货",
+}
+
 // IsGenericWord 判断是否为通用词
 func IsGenericWord(word string) bool {
 	word = strings.ToLower(word)
@@ -22,6 +29,17 @@
 	return false
 }
 
+// IsEntityWord 判断是否为实体词
+func IsEntityWord(word string) bool {
+	wordLower := strings.ToLower(word)
+	for _, e := range EntityWords {
+		if wordLower == strings.ToLower(e) {
+			return true
+		}
+	}
+	return false
+}
+
 // ScoreType 评分类型
 type ScoreType int
 
@@ -29,6 +47,7 @@
 	ScoreNormal  ScoreType = iota // 普通词
 	ScoreExpanded                 // 扩展词
 	ScoreSymptom                  // 症状词
+	ScoreOriginal                 // 用户原词(完整短语,强信号,高于 bigram 扩展档)
 )
 
 // ScoreTable 评分表
@@ -39,6 +58,12 @@
 		"tag":     2,
 		"content": 1,
 	},
+	ScoreOriginal: {
+		"path":    60,
+		"title":   60,
+		"tag":     60,
+		"content": 60,
+	},
 	ScoreExpanded: {
 		"path":    40,
 		"title":   30,
@@ -59,8 +84,21 @@
 	if base == 0 {
 		return 0
 	}
+	// 实体词降权(匹配太多文件),但保证至少 1 分
+	if IsEntityWord(keyword) {
+		score := base / 5
+		if score < 1 {
+			score = 1
+		}
+		return score
+	}
+	// 通用词降权,但保证至少 1 分
 	if IsGenericWord(keyword) {
-		return base / 10 // 通用词降权
+		score := base / 3
+		if score < 1 {
+			score = 1
+		}
+		return score
 	}
 	return base
 }

--
Gitblit v1.10.0