[fix] delete chunk refresh index

This commit is contained in:
Mark
2026-05-06 15:19:46 +08:00
parent f85c0594c9
commit 70c6d161c8
4 changed files with 12 additions and 5 deletions

View File

@@ -546,6 +546,7 @@ async def delete_chunk(
kb_id: uuid.UUID,
document_id: uuid.UUID,
doc_id: str,
force_refresh: bool = Query(False, description="Force Elasticsearch refresh after deletion"),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user)
):
@@ -563,7 +564,7 @@ async def delete_chunk(
vector_service = ElasticSearchVectorFactory().init_vector(knowledge=db_knowledge)
if vector_service.text_exists(doc_id):
vector_service.delete_by_ids([doc_id])
vector_service.delete_by_ids([doc_id], refresh=force_refresh)
# 更新 chunk_num
db_document = db.query(Document).filter(Document.id == document_id).first()
db_document.chunk_num -= 1

View File

@@ -176,6 +176,7 @@ async def delete_chunk(
request: Request,
api_key_auth: ApiKeyAuth = None,
db: Session = Depends(get_db),
force_refresh: bool = Query(False, description="Force Elasticsearch refresh after deletion"),
):
"""
delete document chunk
@@ -188,6 +189,7 @@ async def delete_chunk(
return await chunk_controller.delete_chunk(kb_id=kb_id,
document_id=document_id,
doc_id=doc_id,
force_refresh=force_refresh,
db=db,
current_user=current_user)

View File

@@ -142,7 +142,7 @@ class ElasticSearchVector(BaseVector):
return True
def delete_by_ids(self, ids: list[str]):
def delete_by_ids(self, ids: list[str], *, refresh: bool = False):
if not ids:
return
if not self._client.indices.exists(index=self._collection_name):
@@ -163,6 +163,8 @@ class ElasticSearchVector(BaseVector):
actions = [{"_op_type": "delete", "_index": self._collection_name, "_id": es_id} for es_id in actual_ids]
try:
helpers.bulk(self._client, actions)
if refresh:
self._client.indices.refresh(index=self._collection_name)
except BulkIndexError as e:
for error in e.errors:
delete_error = error.get('delete', {})
@@ -182,7 +184,7 @@ class ElasticSearchVector(BaseVector):
else:
return None
def delete_by_metadata_field(self, key: str, value: str):
def delete_by_metadata_field(self, key: str, value: str, *, refresh: bool = False):
if not self._client.indices.exists(index=self._collection_name):
return False
actual_ids = self.get_ids_by_metadata_field(key, value)
@@ -191,6 +193,8 @@ class ElasticSearchVector(BaseVector):
actions = [{"_op_type": "delete", "_index": self._collection_name, "_id": es_id} for es_id in actual_ids]
try:
helpers.bulk(self._client, actions)
if refresh:
self._client.indices.refresh(index=self._collection_name)
except BulkIndexError as e:
for error in e.errors:
delete_error = error.get('delete', {})

View File

@@ -27,14 +27,14 @@ class BaseVector(ABC):
raise NotImplementedError
@abstractmethod
def delete_by_ids(self, ids: list[str]):
def delete_by_ids(self, ids: list[str], *, refresh: bool = False):
raise NotImplementedError
def get_ids_by_metadata_field(self, key: str, value: str):
raise NotImplementedError
@abstractmethod
def delete_by_metadata_field(self, key: str, value: str):
def delete_by_metadata_field(self, key: str, value: str, *, refresh: bool = False):
raise NotImplementedError
@abstractmethod