From 3a247dbb3c8ba2d0d9d5e8c472b29cb6e24d77b9 Mon Sep 17 00:00:00 2001 From: Wang Qi Date: Mon, 6 Jul 2026 18:20:42 +0800 Subject: [PATCH] Fix filter to use Chinese (#16673) --- api/db/services/api_service.py | 9 ++++++++- internal/dao/chat_session.go | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/db/services/api_service.py b/api/db/services/api_service.py index 9a9d0297f..020dd9212 100644 --- a/api/db/services/api_service.py +++ b/api/db/services/api_service.py @@ -19,6 +19,7 @@ import peewee from api.db.db_models import DB, API4Conversation, APIToken, Dialog from api.db.services.common_service import CommonService +from api.utils.json_encode import json_dumps from common.time_utils import current_timestamp, datetime_format @@ -65,7 +66,13 @@ class API4ConversationService(CommonService): if user_id: sessions = sessions.where(cls.model.user_id == user_id) if keywords: - sessions = sessions.where(peewee.fn.LOWER(cls.model.message).contains(keywords.lower())) + keywords = keywords.lower() + escaped_keywords = json_dumps(keywords)[1:-1] + message = peewee.fn.LOWER(cls.model.message) + if escaped_keywords == keywords: + sessions = sessions.where(message.contains(keywords)) + else: + sessions = sessions.where(message.contains(keywords) | message.contains(escaped_keywords)) date_field = cls.model.update_date if orderby.startswith("update_") else cls.model.create_date if from_date: sessions = sessions.where(date_field >= cls._normalize_query_date(from_date)) diff --git a/internal/dao/chat_session.go b/internal/dao/chat_session.go index 21d60ab60..3913c5623 100644 --- a/internal/dao/chat_session.go +++ b/internal/dao/chat_session.go @@ -17,6 +17,7 @@ package dao import ( + "strconv" "strings" "time" @@ -197,7 +198,13 @@ func (dao *ChatSessionDAO) ListAgentSessions(params ListAgentSessionsParams) (in } if params.Keywords != "" { - query = query.Where("LOWER(message) LIKE ?", "%"+strings.ToLower(params.Keywords)+"%") + keywords := strings.ToLower(params.Keywords) + escapedKeywords := strings.Trim(strconv.QuoteToASCII(keywords), `"`) + if escapedKeywords == keywords { + query = query.Where("LOWER(message) LIKE ?", "%"+keywords+"%") + } else { + query = query.Where("(LOWER(message) LIKE ? OR LOWER(message) LIKE ?)", "%"+keywords+"%", "%"+escapedKeywords+"%") + } } dateColumn := "create_date"