chore: update document deletion logic to handle paragraph IDs and related mappings
Some checks are pending
sync2gitee / repo-sync (push) Waiting to run
Typos Check / Spell Check with Typos (push) Waiting to run

--bug=1063248 --user=刘瑞斌 【知识库】删除文档时,分段与问题的关联关系没有清除 https://www.tapd.cn/62980211/s/1793500
This commit is contained in:
CaptainB 2025-11-03 16:11:54 +08:00 committed by 刘瑞斌
parent d636d6ea7a
commit 5b46e7d730
2 changed files with 14 additions and 9 deletions

View File

@ -683,10 +683,11 @@ class DocumentSerializers(serializers.Serializer):
]
QuerySet(File).filter(id__in=source_file_ids).delete()
QuerySet(File).filter(source_id=document_id, source_type=FileSourceType.DOCUMENT).delete()
paragraph_ids = QuerySet(model=Paragraph).filter(document_id=document_id).values_list("id", flat=True)
# 删除问题
delete_problems_and_mappings(paragraph_ids)
# 删除段落
QuerySet(model=Paragraph).filter(document_id=document_id).delete()
# 删除问题
delete_problems_and_mappings([document_id])
# 删除向量库
delete_embedding_by_document(document_id)
QuerySet(model=DocumentTag).filter(document_id=document_id).delete()
@ -1217,9 +1218,12 @@ class DocumentSerializers(serializers.Serializer):
Document.objects.filter(id__in=document_id_list).values("meta")]
QuerySet(File).filter(id__in=source_file_ids).delete()
QuerySet(Document).filter(id__in=document_id_list).delete()
QuerySet(Paragraph).filter(document_id__in=document_id_list).delete()
QuerySet(DocumentTag).filter(document_id__in=document_id_list).delete()
delete_problems_and_mappings(document_id_list)
paragraph_ids = QuerySet(Paragraph).filter(document_id__in=document_id_list).values_list("id", flat=True)
# 删除问题关系
delete_problems_and_mappings(paragraph_ids)
# 删除段落
QuerySet(Paragraph).filter(document_id__in=document_id_list).delete()
# 删除向量库
delete_embedding_by_document_list(document_id_list)
return True

View File

@ -1,5 +1,6 @@
SELECT
problem.*,
(SELECT "count"("id") FROM "problem_paragraph_mapping" WHERE problem_id="problem"."id") as "paragraph_count"
FROM
problem problem
SELECT problem.*,
(SELECT COUNT(ppm.id)
FROM problem_paragraph_mapping ppm
INNER JOIN paragraph p ON ppm.paragraph_id = p.id
WHERE ppm.problem_id = problem.id) AS "paragraph_count"
FROM problem problem