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