From 09c2a03cefa687832257d3b816da50db3cfcc0f2 Mon Sep 17 00:00:00 2001
From: ai_xiaopei <xiaopei@aisim.cn>
Date: Sat, 25 Jul 2026 23:48:11 +0800
Subject: [PATCH] feat: 实现输出格式化

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

diff --git a/internal/search/scorer.go b/internal/search/scorer.go
new file mode 100644
index 0000000..ae676b4
--- /dev/null
+++ b/internal/search/scorer.go
@@ -0,0 +1,66 @@
+package search
+
+import (
+	"strings"
+)
+
+// GenericWords 通用词列表(降低权重避免匹配所有文件)
+var GenericWords = []string{
+	"问题", "故障", "报错", "异常", "无法", "不能",
+	"怎么", "如何", "为什么", "是什么", "哪里", "什么",
+	"可以", "需要", "应该", "是否", "有没有",
+}
+
+// IsGenericWord 判断是否为通用词
+func IsGenericWord(word string) bool {
+	word = strings.ToLower(word)
+	for _, g := range GenericWords {
+		if word == g {
+			return true
+		}
+	}
+	return false
+}
+
+// ScoreType 评分类型
+type ScoreType int
+
+const (
+	ScoreNormal  ScoreType = iota // 普通词
+	ScoreExpanded                 // 扩展词
+	ScoreSymptom                  // 症状词
+)
+
+// ScoreTable 评分表
+var ScoreTable = map[ScoreType]map[string]int{
+	ScoreNormal: {
+		"path":    2,
+		"title":   3,
+		"tag":     2,
+		"content": 1,
+	},
+	ScoreExpanded: {
+		"path":    40,
+		"title":   30,
+		"tag":     20,
+		"content": 5,
+	},
+	ScoreSymptom: {
+		"path":    60,
+		"title":   50,
+		"tag":     35,
+		"content": 15,
+	},
+}
+
+// CalcScore 计算单个关键词在某个位置的得分
+func CalcScore(keyword string, position string, scoreType ScoreType) int {
+	base := ScoreTable[scoreType][position]
+	if base == 0 {
+		return 0
+	}
+	if IsGenericWord(keyword) {
+		return base / 10 // 通用词降权
+	}
+	return base
+}

--
Gitblit v1.9.1