🎨 优化机器人关键词匹配
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user