🎨 优化机器人关键词匹配

This commit is contained in:
2025-09-27 17:22:32 +08:00
parent 0ec44fad2c
commit f0ea189553

View File

@@ -127,6 +127,21 @@ func (btService *BotService) GetBotPublic(keyWord botReq.FindKey, userId uint) (
whereClause := strings.Join(conditions, " OR ")
err = global.GVA_DB.Where(whereClause, args...).First(&bt).Error
// 如果没有查到进行2字一组分词模糊匹配
if err == gorm.ErrRecordNotFound {
segments := splitByTwoWords(userInput)
if len(segments) > 0 {
var segConds []string
var segArgs []interface{}
for _, seg := range segments {
segConds = append(segConds, "keyword LIKE ?")
segArgs = append(segArgs, "%"+seg+"%")
}
segWhere := strings.Join(segConds, " OR ")
err = global.GVA_DB.Where(segWhere, segArgs...).First(&bt).Error
}
}
go func() {
// 更新查询次数
if err == nil && bt.ID != 0 {
@@ -136,6 +151,16 @@ func (btService *BotService) GetBotPublic(keyWord botReq.FindKey, userId uint) (
return
}
// splitByTwoWords 将字符串按2字一组分割
func splitByTwoWords(s string) []string {
runes := []rune(s)
var result []string
for i := 0; i < len(runes)-1; i++ {
result = append(result, string(runes[i:i+2]))
}
return result
}
// generateKeywordVariants 生成关键词的所有可能变体
func (btService *BotService) generateKeywordVariants(input string) []string {
variants := make(map[string]bool)