Skip to content

Commit f3f11a4

Browse files
add keep_docs to drop_index (#108)
* add keep_docs to drop_index * streamline test * changed keep_documents param to delete_documents * no need for different index name * revent to ft.drop for back support * Add dropindex function. deprecated drop_index Co-authored-by: Emmanuel Keller <[email protected]>
1 parent f07c09b commit f3f11a4

File tree

2 files changed

+42
-6
lines changed

2 files changed

+42
-6
lines changed

redisearch/client.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,29 @@ def alter_schema_add(self, fields):
299299

300300
return self.redis.execute_command(*args)
301301

302-
def drop_index(self):
302+
def drop_index(self, delete_documents=True):
303303
"""
304-
Drop the index if it exists
304+
Drop the index if it exists. Deprecated from RediSearch 2.0.
305+
306+
### Parameters:
307+
308+
- **delete_documents**: If `True`, all documents will be deleted.
309+
"""
310+
keep_str = '' if delete_documents else 'KEEPDOCS'
311+
return self.redis.execute_command(self.DROP_CMD, self.index_name, keep_str)
312+
313+
def dropindex(self, delete_documents=False):
314+
"""
315+
Drop the index if it exists.
316+
Replaced `drop_index` in RediSearch 2.0.
317+
Default behavior was changed to not delete the indexed documents.
318+
319+
### Parameters:
320+
321+
- **delete_documents**: If `True`, all documents will be deleted.
305322
"""
306-
return self.redis.execute_command(self.DROP_CMD, self.index_name)
323+
keep_str = '' if delete_documents else 'KEEPDOCS'
324+
return self.redis.execute_command(self.DROP_CMD, self.index_name, keep_str)
307325

308326
def _add_document(self, doc_id, conn=None, nosave=False, score=1.0, payload=None,
309327
replace=False, partial=False, language=None, no_create=False, **fields):

test/test.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def createIndex(self, client, num_docs = 100, definition=None):
5757
TextField('txt'),
5858
NumericField('chapter')), definition=definition)
5959
except redis.ResponseError:
60-
client.drop_index()
60+
client.dropindex(delete_documents=True)
6161
return self.createIndex(client, num_docs=num_docs, definition=definition)
6262

6363
chapters = {}
@@ -193,7 +193,7 @@ def getCleanClient(self, name):
193193
"""
194194
client = Client(name, port=self.server.port)
195195
try:
196-
client.drop_index()
196+
client.dropindex(delete_documents=True)
197197
except:
198198
pass
199199

@@ -391,6 +391,25 @@ def testSortby(self):
391391
self.assertEqual('doc2', res2.docs[1].id)
392392
self.assertEqual('doc3', res2.docs[0].id)
393393

394+
def testDropIndex(self):
395+
"""
396+
Ensure the index gets dropped by data remains by default
397+
"""
398+
for x in range(20):
399+
conn = self.redis()
400+
with conn as r:
401+
if check_version(r, 20000):
402+
for keep_docs in [[ True , {} ], [ False , {'name': 'haveit'} ]]:
403+
idx = "HaveIt"
404+
index = Client(idx, port=conn.port)
405+
index.redis.hset("index:haveit", mapping = {'name': 'haveit'})
406+
idef = IndexDefinition(prefix=['index:'])
407+
index.create_index((TextField('name'),),definition=idef)
408+
waitForIndex(index.redis, idx)
409+
index.dropindex(delete_documents=keep_docs[0])
410+
i = index.redis.hgetall("index:haveit")
411+
self.assertEqual(i, keep_docs[1])
412+
394413
def testExample(self):
395414
conn = self.redis()
396415

@@ -923,6 +942,5 @@ def testCreateClientDefiniontion(self):
923942
info = client.info()
924943
self.assertEqual(495, int(info['num_docs']))
925944

926-
927945
if __name__ == '__main__':
928946
unittest.main()

0 commit comments

Comments
 (0)