fix: adapt ClickHouse log LIKE filters

This commit is contained in:
CaIon
2026-06-27 17:03:25 +08:00
parent 4aee5f7d5a
commit df44a75d53
3 changed files with 81 additions and 20 deletions
+25 -18
View File
@@ -98,30 +98,37 @@ func sanitizeLikePattern(input string) (string, error) {
input = strings.ReplaceAll(input, "!", "!!")
input = strings.ReplaceAll(input, `_`, `!_`)
// 2. 连续的 % 直接拒绝
if strings.Contains(input, "%%") {
return "", errors.New("搜索模式中不允许包含连续的 % 通配符")
}
// 3. 统计 % 数量,不得超过 2
count := strings.Count(input, "%")
if count > 2 {
return "", errors.New("搜索模式中最多允许包含 2 个 % 通配符")
}
// 4. 含 % 时,去掉 % 后关键词长度必须 >= 2
if count > 0 {
stripped := strings.ReplaceAll(input, "%", "")
if len(stripped) < 2 {
return "", errors.New("使用模糊搜索时,关键词长度至少为 2 个字符")
}
return input, nil
if err := validateLikePattern(input); err != nil {
return "", err
}
// 5. 无 % 时,精确全匹配
return input, nil
}
func validateLikePattern(input string) error {
// 1. 连续的 % 直接拒绝
if strings.Contains(input, "%%") {
return errors.New("搜索模式中不允许包含连续的 % 通配符")
}
// 2. 统计 % 数量,不得超过 2
count := strings.Count(input, "%")
if count > 2 {
return errors.New("搜索模式中最多允许包含 2 个 % 通配符")
}
// 3. 含 % 时,去掉 % 后关键词长度必须 >= 2
if count > 0 {
stripped := strings.ReplaceAll(input, "%", "")
if len(stripped) < 2 {
return errors.New("使用模糊搜索时,关键词长度至少为 2 个字符")
}
}
return nil
}
const searchHardLimit = 100
func SearchUserTokens(userId int, keyword string, token string, offset int, limit int) (tokens []*Token, total int64, err error) {