Merge pull request #2322 from danielaskdd/fix-delete

Fix: Remove Duplicate Entity/Realtion Tracking Deletion in adelete_by_doc_id
This commit is contained in:
Daniel.y 2025-11-07 03:07:05 +08:00 committed by GitHub
commit 366a1e0f5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3235,38 +3235,31 @@ class LightRAG:
if entity_chunk_updates and self.entity_chunks: if entity_chunk_updates and self.entity_chunks:
entity_upsert_payload = {} entity_upsert_payload = {}
entity_delete_ids: set[str] = set()
for entity_name, remaining in entity_chunk_updates.items(): for entity_name, remaining in entity_chunk_updates.items():
if not remaining: if not remaining:
entity_delete_ids.add(entity_name) # Empty entities are deleted alongside graph nodes later
else: continue
entity_upsert_payload[entity_name] = { entity_upsert_payload[entity_name] = {
"chunk_ids": remaining, "chunk_ids": remaining,
"count": len(remaining), "count": len(remaining),
"updated_at": current_time, "updated_at": current_time,
} }
if entity_delete_ids:
await self.entity_chunks.delete(list(entity_delete_ids))
if entity_upsert_payload: if entity_upsert_payload:
await self.entity_chunks.upsert(entity_upsert_payload) await self.entity_chunks.upsert(entity_upsert_payload)
if relation_chunk_updates and self.relation_chunks: if relation_chunk_updates and self.relation_chunks:
relation_upsert_payload = {} relation_upsert_payload = {}
relation_delete_ids: set[str] = set()
for edge_tuple, remaining in relation_chunk_updates.items(): for edge_tuple, remaining in relation_chunk_updates.items():
storage_key = make_relation_chunk_key(*edge_tuple)
if not remaining: if not remaining:
relation_delete_ids.add(storage_key) # Empty relations are deleted alongside graph edges later
else: continue
relation_upsert_payload[storage_key] = { storage_key = make_relation_chunk_key(*edge_tuple)
"chunk_ids": remaining, relation_upsert_payload[storage_key] = {
"count": len(remaining), "chunk_ids": remaining,
"updated_at": current_time, "count": len(remaining),
} "updated_at": current_time,
}
if relation_delete_ids:
await self.relation_chunks.delete(list(relation_delete_ids))
if relation_upsert_payload: if relation_upsert_payload:
await self.relation_chunks.upsert(relation_upsert_payload) await self.relation_chunks.upsert(relation_upsert_payload)
@ -3296,7 +3289,7 @@ class LightRAG:
# 6. Delete relationships that have no remaining sources # 6. Delete relationships that have no remaining sources
if relationships_to_delete: if relationships_to_delete:
try: try:
# Delete from vector database # Delete from relation vdb
rel_ids_to_delete = [] rel_ids_to_delete = []
for src, tgt in relationships_to_delete: for src, tgt in relationships_to_delete:
rel_ids_to_delete.extend( rel_ids_to_delete.extend(
@ -3401,7 +3394,7 @@ class LightRAG:
list(entities_to_delete) list(entities_to_delete)
) )
# Delete from vector database # Delete from vector vdb
entity_vdb_ids = [ entity_vdb_ids = [
compute_mdhash_id(entity, prefix="ent-") compute_mdhash_id(entity, prefix="ent-")
for entity in entities_to_delete for entity in entities_to_delete