feat: update knowledge retrieval logic and optimize SQL queries for application listing

This commit is contained in:
CaptainB 2025-06-04 19:39:21 +08:00
parent 40137f147b
commit 8b9e03d7cf
2 changed files with 7 additions and 18 deletions

View File

@ -236,15 +236,13 @@ class KnowledgeSerializer(serializers.Serializer):
def list_application(self, with_valid=True): def list_application(self, with_valid=True):
if with_valid: if with_valid:
self.is_valid(raise_exception=True) self.is_valid(raise_exception=True)
knowledge = QuerySet(Knowledge).get(id=self.data.get("knowledge_id")) # knowledge = QuerySet(Knowledge).get(id=self.data.get("knowledge_id"))
return select_list( return select_list(
get_file_content( get_file_content(
os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge_application.sql') os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge_application.sql')
), ),
[ [
self.data.get('user_id') if self.data.get('user_id') == str(knowledge.user_id) else None, self.data.get('user_id'),
knowledge.user_id,
self.data.get('user_id')
] ]
) )
@ -252,15 +250,14 @@ class KnowledgeSerializer(serializers.Serializer):
self.is_valid() self.is_valid()
query_set_dict = { query_set_dict = {
'default_sql': QuerySet( 'default_sql': QuerySet(
model=get_dynamics_model({'temp.id': models.UUIDField()}) model=get_dynamics_model({'temp.id': models.CharField()})
).filter(**{'temp.id': self.data.get("knowledge_id")}), ).filter(**{'temp.id': self.data.get("knowledge_id")}),
'knowledge_custom_sql': QuerySet( 'knowledge_custom_sql': QuerySet(
model=get_dynamics_model({'knowledge.user_id': models.CharField()}) model=get_dynamics_model({'knowledge.user_id': models.CharField()})
).filter(**{'knowledge.user_id': self.data.get("user_id")}), ).filter(**{'knowledge.user_id': self.data.get("user_id")}),
'folder_query_set': QuerySet(KnowledgeFolder)
} }
# todo 这里需要优化 all_application_list = [str(adm.get('id')) for adm in self.list_application(with_valid=False)]
# all_application_list = [str(adm.get('id')) for adm in self.list_application(with_valid=False)]
all_application_list = []
return { return {
**native_search(query_set_dict, select_string=get_file_content( **native_search(query_set_dict, select_string=get_file_content(
os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql')), with_search_one=True), os.path.join(PROJECT_DIR, "apps", "knowledge", 'sql', 'list_knowledge.sql')), with_search_one=True),
@ -555,7 +552,7 @@ class KnowledgeSerializer(serializers.Serializer):
{'name': document_name, 'paragraphs': paragraphs, {'name': document_name, 'paragraphs': paragraphs,
'meta': {'source_url': child_link.url.strip(), 'meta': {'source_url': child_link.url.strip(),
'selector': knowledge.meta.get('selector')}, 'selector': knowledge.meta.get('selector')},
'type': Knowledge.WEB}, with_valid=True) 'type': KnowledgeType.WEB}, with_valid=True)
except Exception as e: except Exception as e:
logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}') logging.getLogger("max_kb_error").error(f'{str(e)}:{traceback.format_exc()}')

View File

@ -9,12 +9,4 @@ SELECT
FROM FROM
application application
WHERE WHERE
"id" IN ( "id" in (select target from workspace_user_resource_permission where auth_target_type = 'APPLICATION' and 'VIEW' = any (permission_list))
SELECT
team_member_permission.target
FROM
team_member team_member
LEFT JOIN team_member_permission team_member_permission ON team_member_permission.member_id = team_member."id"
WHERE
( "team_member_permission"."auth_target_type" = 'APPLICATION' AND "team_member_permission"."operate"::text[] @> ARRAY['USE'] AND team_member.team_id = %s AND team_member.user_id =%s )
)