Upgrade a database to RediSearch 2.x
RediSearch 2.x includes some significant architectural changes that improve functionality. The main change is that RediSearch 2.x stores indexes outside of the Redis database that contains the data. This makes commands more efficient and improves replication between clusters because the index changes are managed by the participating clusters rather than being synchronized with the data.
This change allows databases with RediSearch to support:
- Active-Active databases
- Database cluster re-sharding
- Replica Of to a sharded destination database
- EXPIRE of documents reflected in the index
In addition, RediSearch 2.x indexes data that already existed in the database at the time that the index was created.
To upgrade a Redis Enterprise Software database with RediSearch 1.x to RediSearch 2.x, you have to set up a new database with RediSearch 2.x and use the
RediSearch_Syncer.py script to replicate the data from the old database into the new database.
Install Python 3 on the host where you plan to run the synchronization script:
sudo apt install python3
- Suggestions (
FT.SUGAPIs) and spell check dictionaries are not replicated from the source database. You need to add them manually.
- If there are multiple indexes on the source and the documents do not have prefixes that identify them with an index, RediSearch 2.x can’t index the documents in their respective indexes.
NOSAVEoption is no longer supported. Indexes created with the
NOSAVEoption can’t be upgraded.
- Databases that contain temporary indexes can’t be upgraded.
- Any attempt to add, delete, or modify an index during the upgrade will cause the replication process to fail. During the upgrade, the source database can only receive
Replicate data from RediSearch 1.x to RediSearch 2.x
To replicate a RediSearch 1.x database to a RediSearch 2.x database:
Sign in to the admin console of the Redis Enterprise cluster where you want to host the new RediSearch 2.x database.
Add the RediSearch 2.x module to the cluster.
Create a new database with RediSearch 2.x.
Migrate data to the RediSearch 2.x database.
Add RediSearch 2.x to the cluster
Download the RediSearch 2.x module package from the Redis Download Center.
In the Redis Enterprise admin console, select settings.
In redis modules, select the Add module button.
Use the file browser to select the module package and upload it to the cluster.
Create a RediSearch 2.x database
Create a database and configure its settings.
In the Redis Modules section:
Select the Activate button to create the database.
Download the RediSearch_Syncer package for your operating system:
Extract the package:
In the extracted directory, run the RediSearch_Syncer.py script:
python3 RediSearch_Syncer.py -d <destination_url> -s <source_url> [--add-prefix <prefix>]
Replace the following variables with your own values:
destination url- The replication URL of the RediSearch 2.x database. To find this value, go to the database configuration screen in the admin console and select Get Replica of source URL.
source url- The replication URL of the RediSearch 1.x database. To find this value, go to the database configuration screen in the admin console and select Get Replica of source URL.
--add-prefix <prefix>(optional) - Adds a prefix to all of the hashes that are replicated to the new database.Note:Only use the
add-prefixoption if you want to index all of the hashes in the same index in the source database.
The script shows a table with the progress of the replication process. Press F5 to see the updated status.
Stop the processes that are sending requests to the source database so all of the data gets synchronized to the destination database.
FT.INFOon both source and destination databases and compare the number of indexed documents. The replication process is complete when the number of indexed documents is the same in both databases.
When the status field is
st_in_sync, you can press Ctrl-C to cancel the synchronization process.
Press Q to quit the
You can now redirect your database connections to the RediSearch 2.x database.