fix-delete-idx
This commit is contained in:
parent
27633a9c3c
commit
4c2527f416
2 changed files with 41 additions and 18 deletions
|
|
@ -191,9 +191,46 @@ class FalkorDriver(GraphDriver):
|
||||||
await self.client.connection.close()
|
await self.client.connection.close()
|
||||||
|
|
||||||
async def delete_all_indexes(self) -> None:
|
async def delete_all_indexes(self) -> None:
|
||||||
await self.execute_query(
|
from collections import defaultdict
|
||||||
'CALL db.indexes() YIELD name DROP INDEX name',
|
|
||||||
)
|
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':
|
def clone(self, database: str) -> 'GraphDriver':
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -35,21 +35,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
async def build_indices_and_constraints(driver: GraphDriver, delete_existing: bool = False):
|
async def build_indices_and_constraints(driver: GraphDriver, delete_existing: bool = False):
|
||||||
if delete_existing:
|
if delete_existing:
|
||||||
records, _, _ = await driver.execute_query(
|
await driver.delete_all_indexes()
|
||||||
"""
|
|
||||||
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
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
range_indices: list[LiteralString] = get_range_indices(driver.provider)
|
range_indices: list[LiteralString] = get_range_indices(driver.provider)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue