diff --git a/api/db/services/knowledgebase_service.py b/api/db/services/knowledgebase_service.py index f4567cd..b87bb5f 100644 --- a/api/db/services/knowledgebase_service.py +++ b/api/db/services/knowledgebase_service.py @@ -75,48 +75,78 @@ class KnowledgebaseService(CommonService): orderby, desc, keywords, parser_id=None ): + """ + 根据租户ID列表获取知识库记录的方法。 + + 参数: + joined_tenant_ids: 列表,包含用户已加入的租户ID。 + user_id: 用户ID,用于查询特定用户的知识库。 + page_number: 分页页码,用于分页显示知识库记录。 + items_per_page: 每页显示的记录数。 + orderby: 字符串,指定排序字段。 + desc: 布尔值,指示是否按降序排序。 + keywords: 字符串,用于模糊搜索知识库名称。 + parser_id: 可选参数,指定解析器ID以过滤知识库记录。 + + 返回值: + 返回两个元素的元组,第一个元素是知识库记录的字典列表,第二个元素是知识库记录的总数。 + """ + # 定义需要查询的字段 fields = [ - cls.model.id, - cls.model.avatar, - cls.model.name, - cls.model.language, - cls.model.description, - cls.model.permission, - cls.model.doc_num, - cls.model.token_num, - cls.model.chunk_num, - cls.model.parser_id, - cls.model.embd_id, - User.nickname, - User.avatar.alias('tenant_avatar'), - cls.model.update_time + cls.model.id, # 知识库ID + cls.model.avatar, # 知识库头像 + cls.model.name, # 知识库名称 + cls.model.language, # 知识库语言 + cls.model.description, # 知识库描述 + cls.model.permission, # 知识库权限 + cls.model.doc_num, # 文档数量 + cls.model.token_num, # 令牌数量 + cls.model.chunk_num, # 块数量 + cls.model.parser_id, # 解析器ID + cls.model.embd_id, # 嵌入ID + User.nickname, # 租户昵称 + User.avatar.alias('tenant_avatar'), # 租户头像,使用别名以便区分 + cls.model.update_time # 更新时间 ] + + # 如果提供了关键词,则进行模糊搜索 if keywords: kbs = cls.model.select(*fields).join(User, on=(cls.model.tenant_id == User.id)).where( + # 筛选条件:租户ID在列表中且权限为团队或租户ID等于用户ID ((cls.model.tenant_id.in_(joined_tenant_ids) & (cls.model.permission == TenantPermission.TEAM.value)) | ( cls.model.tenant_id == user_id)) + # 状态必须为有效 & (cls.model.status == StatusEnum.VALID.value), + # 名称包含关键词(不区分大小写) (fn.LOWER(cls.model.name).contains(keywords.lower())) ) else: + # 如果没有提供关键词,则不进行搜索,只筛选符合条件的知识库 kbs = cls.model.select(*fields).join(User, on=(cls.model.tenant_id == User.id)).where( ((cls.model.tenant_id.in_(joined_tenant_ids) & (cls.model.permission == TenantPermission.TEAM.value)) | ( cls.model.tenant_id == user_id)) & (cls.model.status == StatusEnum.VALID.value) ) + + # 如果提供了解析器ID,则进一步过滤知识库记录 if parser_id: kbs = kbs.where(cls.model.parser_id == parser_id) + + # 根据desc参数决定排序方式 if desc: - kbs = kbs.order_by(cls.model.getter_by(orderby).desc()) + kbs = kbs.order_by(cls.model.getter_by(orderby).desc()) # 按降序排序 else: - kbs = kbs.order_by(cls.model.getter_by(orderby).asc()) - + kbs = kbs.order_by(cls.model.getter_by(orderby).asc()) # 按升序排序 + + # 获取知识库记录总数 count = kbs.count() - + + # 对查询结果进行分页 kbs = kbs.paginate(page_number, items_per_page) - + + # 将查询结果转换为字典列表并返回,同时返回记录总数 return list(kbs.dicts()), count @classmethod diff --git a/docker/docker-compose-base.yml b/docker/docker-compose-base.yml index eb32e17..064c982 100644 --- a/docker/docker-compose-base.yml +++ b/docker/docker-compose-base.yml @@ -29,7 +29,7 @@ services: retries: 120 networks: - ragflow - restart: on-failure + restart: no mysql: # mysql:5.7 linux/arm64 image is unavailable. @@ -58,7 +58,7 @@ services: interval: 10s timeout: 10s retries: 3 - restart: on-failure + restart: no minio: image: quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z @@ -76,7 +76,7 @@ services: - minio_data:/data networks: - ragflow - restart: on-failure + restart: no redis: # swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/valkey/valkey:8 @@ -90,7 +90,7 @@ services: - redis_data:/data networks: - ragflow - restart: on-failure + restart: no diff --git a/docker/docker-compose_gpu.yml b/docker/docker-compose_gpu.yml index f9fee4a..de07d59 100644 --- a/docker/docker-compose_gpu.yml +++ b/docker/docker-compose_gpu.yml @@ -24,7 +24,7 @@ services: - MACOS=${MACOS} networks: - ragflow - restart: on-failure + restart: no extra_hosts: - "host.docker.internal:host-gateway" @@ -43,7 +43,7 @@ services: - API_BASE_URL=/api networks: - ragflow - restart: on-failure + restart: no extra_hosts: - "host.docker.internal:host-gateway" @@ -70,7 +70,7 @@ services: - MANAGEMENT_JWT_SECRET=${MANAGEMENT_JWT_SECRET:-12345678} networks: - ragflow - restart: on-failure + restart: no extra_hosts: - "host.docker.internal:host-gateway" deploy: diff --git a/management/server/routes/users/routes.py b/management/server/routes/users/routes.py index c81eeee..1e5232d 100644 --- a/management/server/routes/users/routes.py +++ b/management/server/routes/users/routes.py @@ -2,6 +2,7 @@ from flask import jsonify, request from services.users.service import get_users_with_pagination, delete_user, create_user, update_user, reset_user_password from .. import users_bp + @users_bp.route('', methods=['GET']) def get_users(): """获取用户的API端点,支持分页和条件查询"""