|
23 | 23 | from redis.commands.search.indexDefinition import IndexDefinition
|
24 | 24 |
|
25 | 25 | from redisvl.index.storage import HashStorage, JsonStorage
|
26 |
| -from redisvl.query.query import BaseQuery, CountQuery, FilterQuery |
| 26 | +from redisvl.query import BaseQuery, CountQuery, FilterQuery |
| 27 | +from redisvl.query.filter import FilterExpression |
27 | 28 | from redisvl.redis.connection import (
|
28 | 29 | RedisConnectionFactory,
|
29 | 30 | convert_index_info_to_schema,
|
@@ -476,6 +477,26 @@ def delete(self, drop: bool = True):
|
476 | 477 | except:
|
477 | 478 | logger.exception("Error while deleting index")
|
478 | 479 |
|
| 480 | + def clear(self) -> int: |
| 481 | + """Clear all keys in Redis associated with the index, leaving the index |
| 482 | + available and in-place for future insertions or updates. |
| 483 | +
|
| 484 | + Returns: |
| 485 | + int: Count of records deleted from Redis. |
| 486 | + """ |
| 487 | + # Track deleted records |
| 488 | + total_records_deleted: int = 0 |
| 489 | + |
| 490 | + # Paginate using queries and delete in batches |
| 491 | + for batch in self.paginate( |
| 492 | + FilterQuery(FilterExpression("*"), return_fields=["id"]), page_size=500 |
| 493 | + ): |
| 494 | + batch_keys = [record["id"] for record in batch] |
| 495 | + record_deleted = self._redis_client.delete(*batch_keys) # type: ignore |
| 496 | + total_records_deleted += record_deleted # type: ignore |
| 497 | + |
| 498 | + return total_records_deleted |
| 499 | + |
479 | 500 | def load(
|
480 | 501 | self,
|
481 | 502 | data: Iterable[Any],
|
@@ -894,6 +915,26 @@ async def delete(self, drop: bool = True):
|
894 | 915 | logger.exception("Error while deleting index")
|
895 | 916 | raise
|
896 | 917 |
|
| 918 | + async def clear(self) -> int: |
| 919 | + """Clear all keys in Redis associated with the index, leaving the index |
| 920 | + available and in-place for future insertions or updates. |
| 921 | +
|
| 922 | + Returns: |
| 923 | + int: Count of records deleted from Redis. |
| 924 | + """ |
| 925 | + # Track deleted records |
| 926 | + total_records_deleted: int = 0 |
| 927 | + |
| 928 | + # Paginate using queries and delete in batches |
| 929 | + async for batch in self.paginate( |
| 930 | + FilterQuery(FilterExpression("*"), return_fields=["id"]), page_size=500 |
| 931 | + ): |
| 932 | + batch_keys = [record["id"] for record in batch] |
| 933 | + records_deleted = await self._redis_client.delete(*batch_keys) # type: ignore |
| 934 | + total_records_deleted += records_deleted # type: ignore |
| 935 | + |
| 936 | + return total_records_deleted |
| 937 | + |
897 | 938 | async def load(
|
898 | 939 | self,
|
899 | 940 | data: Iterable[Any],
|
|
0 commit comments