Fix: Handle the case of deleting empty blocks. Update the relevant message (#6643)

…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>
This commit is contained in:
liwenju0 2025-04-02 19:20:17 +08:00 committed by GitHub
parent 0d1c5fdd2f
commit a73fbc61ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 8 additions and 2 deletions

View File

@ -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},)

View File

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

View File

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