…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
| if chunk_number != 0: | if chunk_number != 0: | ||||
| DocumentService.decrement_chunk_num(document_id, dataset_id, 1, 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 "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)}") | return get_error_data_result(message=f"rm_chunk deleted chunks {chunk_number}, expect {len(unique_chunk_ids)}") | ||||
| if duplicate_messages: | 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},) | return get_result(message=f"Partially deleted {chunk_number} chunks with {len(duplicate_messages)} errors", data={"success_count": chunk_number, "errors": duplicate_messages},) |
| chunk_ids = condition["id"] | chunk_ids = condition["id"] | ||||
| if not isinstance(chunk_ids, list): | if not isinstance(chunk_ids, list): | ||||
| chunk_ids = [chunk_ids] | 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: | else: | ||||
| qry = Q("bool") | qry = Q("bool") | ||||
| for k, v in condition.items(): | for k, v in condition.items(): |
| ), | ), | ||||
| (lambda r: {"chunk_ids": r[:1]}, 0, "", 4), | (lambda r: {"chunk_ids": r[:1]}, 0, "", 4), | ||||
| (lambda r: {"chunk_ids": r}, 0, "", 1), | (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( | def test_basic_scenarios( |