[fix] delete chunk refresh index
This commit is contained in:
@@ -546,6 +546,7 @@ async def delete_chunk(
|
|||||||
kb_id: uuid.UUID,
|
kb_id: uuid.UUID,
|
||||||
document_id: uuid.UUID,
|
document_id: uuid.UUID,
|
||||||
doc_id: str,
|
doc_id: str,
|
||||||
|
force_refresh: bool = Query(False, description="Force Elasticsearch refresh after deletion"),
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
current_user: User = Depends(get_current_user)
|
current_user: User = Depends(get_current_user)
|
||||||
):
|
):
|
||||||
@@ -563,7 +564,7 @@ async def delete_chunk(
|
|||||||
|
|
||||||
vector_service = ElasticSearchVectorFactory().init_vector(knowledge=db_knowledge)
|
vector_service = ElasticSearchVectorFactory().init_vector(knowledge=db_knowledge)
|
||||||
if vector_service.text_exists(doc_id):
|
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
|
# 更新 chunk_num
|
||||||
db_document = db.query(Document).filter(Document.id == document_id).first()
|
db_document = db.query(Document).filter(Document.id == document_id).first()
|
||||||
db_document.chunk_num -= 1
|
db_document.chunk_num -= 1
|
||||||
|
|||||||
@@ -176,6 +176,7 @@ async def delete_chunk(
|
|||||||
request: Request,
|
request: Request,
|
||||||
api_key_auth: ApiKeyAuth = None,
|
api_key_auth: ApiKeyAuth = None,
|
||||||
db: Session = Depends(get_db),
|
db: Session = Depends(get_db),
|
||||||
|
force_refresh: bool = Query(False, description="Force Elasticsearch refresh after deletion"),
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
delete document chunk
|
delete document chunk
|
||||||
@@ -188,6 +189,7 @@ async def delete_chunk(
|
|||||||
return await chunk_controller.delete_chunk(kb_id=kb_id,
|
return await chunk_controller.delete_chunk(kb_id=kb_id,
|
||||||
document_id=document_id,
|
document_id=document_id,
|
||||||
doc_id=doc_id,
|
doc_id=doc_id,
|
||||||
|
force_refresh=force_refresh,
|
||||||
db=db,
|
db=db,
|
||||||
current_user=current_user)
|
current_user=current_user)
|
||||||
|
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ class ElasticSearchVector(BaseVector):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def delete_by_ids(self, ids: list[str]):
|
def delete_by_ids(self, ids: list[str], *, refresh: bool = False):
|
||||||
if not ids:
|
if not ids:
|
||||||
return
|
return
|
||||||
if not self._client.indices.exists(index=self._collection_name):
|
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]
|
actions = [{"_op_type": "delete", "_index": self._collection_name, "_id": es_id} for es_id in actual_ids]
|
||||||
try:
|
try:
|
||||||
helpers.bulk(self._client, actions)
|
helpers.bulk(self._client, actions)
|
||||||
|
if refresh:
|
||||||
|
self._client.indices.refresh(index=self._collection_name)
|
||||||
except BulkIndexError as e:
|
except BulkIndexError as e:
|
||||||
for error in e.errors:
|
for error in e.errors:
|
||||||
delete_error = error.get('delete', {})
|
delete_error = error.get('delete', {})
|
||||||
@@ -182,7 +184,7 @@ class ElasticSearchVector(BaseVector):
|
|||||||
else:
|
else:
|
||||||
return None
|
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):
|
if not self._client.indices.exists(index=self._collection_name):
|
||||||
return False
|
return False
|
||||||
actual_ids = self.get_ids_by_metadata_field(key, value)
|
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]
|
actions = [{"_op_type": "delete", "_index": self._collection_name, "_id": es_id} for es_id in actual_ids]
|
||||||
try:
|
try:
|
||||||
helpers.bulk(self._client, actions)
|
helpers.bulk(self._client, actions)
|
||||||
|
if refresh:
|
||||||
|
self._client.indices.refresh(index=self._collection_name)
|
||||||
except BulkIndexError as e:
|
except BulkIndexError as e:
|
||||||
for error in e.errors:
|
for error in e.errors:
|
||||||
delete_error = error.get('delete', {})
|
delete_error = error.get('delete', {})
|
||||||
|
|||||||
@@ -27,14 +27,14 @@ class BaseVector(ABC):
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def delete_by_ids(self, ids: list[str]):
|
def delete_by_ids(self, ids: list[str], *, refresh: bool = False):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def get_ids_by_metadata_field(self, key: str, value: str):
|
def get_ids_by_metadata_field(self, key: str, value: str):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
@abstractmethod
|
@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
|
raise NotImplementedError
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
|||||||
Reference in New Issue
Block a user