This commit is contained in:
Voge1imkafig 2025-08-13 17:00:11 +08:00
parent ae462bc9dc
commit 721eeae3bb
4 changed files with 57 additions and 26 deletions

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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端点,支持分页和条件查询"""