Skip to content

Commit 4251d7f

Browse files
feat: add delete all documents to Pinecone DocumentStore (#2403)
* feat: add delete all documents to Pineconde DocumentStore * add empty exception --------- Co-authored-by: Michele Pangrazzi <xmikex83@gmail.com>
1 parent a281ff3 commit 4251d7f

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

integrations/pinecone/src/haystack_integrations/document_stores/pinecone/document_store.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
from pinecone import Pinecone, PineconeAsyncio, PodSpec, ServerlessSpec
1313
from pinecone.db_data import _Index, _IndexAsyncio
14+
from pinecone.exceptions import NotFoundException
1415

1516
from .filters import _normalize_filters, _validate_filters
1617

@@ -352,6 +353,30 @@ async def delete_documents_async(self, document_ids: List[str]) -> None:
352353
assert self._async_index is not None, "Index is not initialized"
353354
await self._async_index.delete(ids=document_ids, namespace=self.namespace)
354355

356+
def delete_all_documents(self) -> None:
357+
"""
358+
Deletes all documents in the document store.
359+
"""
360+
self._initialize_index()
361+
assert self._index is not None, "Index is not initialized"
362+
try:
363+
self._index.delete(delete_all=True, namespace=self.namespace)
364+
except NotFoundException:
365+
# Namespace doesn't exist (empty collection), which is fine - nothing to delete
366+
logger.debug("Namespace '{namespace}' not found. Nothing to delete.", namespace=self.namespace or "default")
367+
368+
async def delete_all_documents_async(self) -> None:
369+
"""
370+
Asynchronously deletes all documents in the document store.
371+
"""
372+
await self._initialize_async_index()
373+
assert self._async_index is not None, "Index is not initialized"
374+
try:
375+
await self._async_index.delete(delete_all=True, namespace=self.namespace)
376+
except NotFoundException:
377+
# Namespace doesn't exist (empty collection), which is fine - nothing to delete
378+
logger.debug("Namespace '{namespace}' not found. Nothing to delete.", namespace=self.namespace or "default")
379+
355380
def _embedding_retrieval(
356381
self,
357382
query_embedding: List[float],

integrations/pinecone/tests/test_document_store.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,19 @@ def test_write_documents_duplicate_skip(self, document_store: PineconeDocumentSt
272272
@pytest.mark.skip(reason="Pinecone creates a namespace only when the first document is written")
273273
def test_delete_documents_empty_document_store(self, document_store: PineconeDocumentStore): ...
274274

275+
def test_delete_all_documents(self, document_store: PineconeDocumentStore):
276+
docs = [Document(content="first doc"), Document(content="second doc")]
277+
document_store.write_documents(docs)
278+
assert document_store.count_documents() == 2
279+
280+
document_store.delete_all_documents()
281+
assert document_store.count_documents() == 0
282+
283+
def test_delete_all_documents_empty_collection(self, document_store: PineconeDocumentStore):
284+
assert document_store.count_documents() == 0
285+
document_store.delete_all_documents()
286+
assert document_store.count_documents() == 0
287+
275288
def test_embedding_retrieval(self, document_store: PineconeDocumentStore):
276289
query_embedding = [0.1] * 768
277290
most_similar_embedding = [0.8] * 768

integrations/pinecone/tests/test_document_store_async.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,19 @@ async def test_delete_documents(self, document_store_async: PineconeDocumentStor
6666
await document_store_async.delete_documents_async([doc.id])
6767
assert await document_store_async.count_documents_async() == 0
6868

69+
async def test_delete_all_documents_async(self, document_store_async: PineconeDocumentStore):
70+
docs = [Document(content="first doc"), Document(content="second doc")]
71+
await document_store_async.write_documents_async(docs)
72+
assert await document_store_async.count_documents_async() == 2
73+
74+
await document_store_async.delete_all_documents_async()
75+
assert await document_store_async.count_documents_async() == 0
76+
77+
async def test_delete_all_documents_async_empty_collection(self, document_store_async: PineconeDocumentStore):
78+
assert await document_store_async.count_documents_async() == 0
79+
await document_store_async.delete_all_documents_async()
80+
assert await document_store_async.count_documents_async() == 0
81+
6982
async def test_embedding_retrieval(self, document_store_async: PineconeDocumentStore):
7083
query_embedding = [0.1] * 768
7184
most_similar_embedding = [0.8] * 768

0 commit comments

Comments
 (0)