…gic to return the correct deletion message. Add handling for empty arrays to ensure no errors occur during the deletion operation. Update the test cases to verify the new logic. ### What problem does this PR solve? fix this bug:https://github.com/infiniflow/ragflow/issues/6607 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --------- Co-authored-by: wenju.li <wenju.li@deepctr.cn>tags/v0.18.0
| @@ -1170,6 +1170,8 @@ def rm_chunk(tenant_id, dataset_id, document_id): | |||
| if chunk_number != 0: | |||
| DocumentService.decrement_chunk_num(document_id, dataset_id, 1, chunk_number, 0) | |||
| if "chunk_ids" in req and chunk_number != len(unique_chunk_ids): | |||
| if len(unique_chunk_ids) == 0: | |||
| return get_result(message=f"deleted {chunk_number} chunks") | |||
| return get_error_data_result(message=f"rm_chunk deleted chunks {chunk_number}, expect {len(unique_chunk_ids)}") | |||
| if duplicate_messages: | |||
| return get_result(message=f"Partially deleted {chunk_number} chunks with {len(duplicate_messages)} errors", data={"success_count": chunk_number, "errors": duplicate_messages},) | |||
| @@ -413,7 +413,10 @@ class ESConnection(DocStoreConnection): | |||
| chunk_ids = condition["id"] | |||
| if not isinstance(chunk_ids, list): | |||
| chunk_ids = [chunk_ids] | |||
| qry = Q("ids", values=chunk_ids) | |||
| if not chunk_ids: # when chunk_ids is empty, delete all | |||
| qry = Q("match_all") | |||
| else: | |||
| qry = Q("ids", values=chunk_ids) | |||
| else: | |||
| qry = Q("bool") | |||
| for k, v in condition.items(): | |||
| @@ -168,7 +168,8 @@ class TestChunksDeletion: | |||
| ), | |||
| (lambda r: {"chunk_ids": r[:1]}, 0, "", 4), | |||
| (lambda r: {"chunk_ids": r}, 0, "", 1), | |||
| pytest.param({"chunk_ids": []}, 0, "", 0, marks=pytest.mark.skip(reason="issues/6607")), | |||
| pytest.param({"chunk_ids": []}, 0, "deleted 5 chunks", 0) | |||
| ], | |||
| ) | |||
| def test_basic_scenarios( | |||