diff --git a/graphiti_core/driver/falkordb_driver.py b/graphiti_core/driver/falkordb_driver.py index 09353158..1fc355fa 100644 --- a/graphiti_core/driver/falkordb_driver.py +++ b/graphiti_core/driver/falkordb_driver.py @@ -191,9 +191,46 @@ class FalkorDriver(GraphDriver): await self.client.connection.close() async def delete_all_indexes(self) -> None: - await self.execute_query( - 'CALL db.indexes() YIELD name DROP INDEX name', - ) + from collections import defaultdict + + result = await self.execute_query('CALL db.indexes()') + if result is None: + return + + records, _, _ = result + + # Organize indexes by type and label + range_indexes = defaultdict(list) + fulltext_indexes = defaultdict(list) + entity_types = {} + + for record in records: + label = record['label'] + entity_types[label] = record['entitytype'] + + for field_name, index_type in record['types'].items(): + if 'RANGE' in index_type: + range_indexes[label].append(field_name) + if 'FULLTEXT' in index_type: + fulltext_indexes[label].append(field_name) + + # Drop all range indexes + for label, fields in range_indexes.items(): + for field in fields: + await self.execute_query(f'DROP INDEX ON :{label}({field})') + + # Drop all fulltext indexes + for label, fields in fulltext_indexes.items(): + entity_type = entity_types[label] + for field in fields: + if entity_type == 'NODE': + await self.execute_query( + f'DROP FULLTEXT INDEX FOR (n:{label}) ON (n.{field})' + ) + elif entity_type == 'RELATIONSHIP': + await self.execute_query( + f'DROP FULLTEXT INDEX FOR ()-[e:{label}]-() ON (e.{field})' + ) def clone(self, database: str) -> 'GraphDriver': """ diff --git a/graphiti_core/utils/maintenance/graph_data_operations.py b/graphiti_core/utils/maintenance/graph_data_operations.py index e9aa3c8b..ee7e6be2 100644 --- a/graphiti_core/utils/maintenance/graph_data_operations.py +++ b/graphiti_core/utils/maintenance/graph_data_operations.py @@ -35,21 +35,7 @@ logger = logging.getLogger(__name__) async def build_indices_and_constraints(driver: GraphDriver, delete_existing: bool = False): if delete_existing: - records, _, _ = await driver.execute_query( - """ - SHOW INDEXES YIELD name - """, - ) - index_names = [record['name'] for record in records] - await semaphore_gather( - *[ - driver.execute_query( - """DROP INDEX $name""", - name=name, - ) - for name in index_names - ] - ) + await driver.delete_all_indexes() range_indices: list[LiteralString] = get_range_indices(driver.provider)