This repository contains a basic demonstration of the object modeling and search capabilities of the Redis OM Python client for Redis. Watch a video of me presenting this demo on YouTube at a Redis Montly Live event (sign up for these here.
The demo requires you to have RediSearch 2.2 or higher installed on your Redis server. The easiest way to get this in order to try out the code here is to use the supplied docker-compose.yml
file, so you'll want to have Docker Desktop installed. This uses the Redis Stack container, which gives you Redis plus the RediSearch and other modules pre-installed.
You'll also require a reasonably up to date version of Python 3 - 3.8 or better. I've tested this on the following version of Python on macOS Monterey 12.3.1:
$ python3 --version
Python 3.9.5
We'll take a look at how to model domain objects in Python using Redis OM. You'll find the model in adoptable.py
. These objects can then be persisted to Redis Hashes by calling save()
on them. By defining which fields should be indexed and how to index them, we can tell Redis OM to build and maintain a RediSearch index for us. This allows us to leverage the fluent querying API to retrieve objects matching multiple search criteria.
In this example, we'll use a small data set of dogs and cats that are available for adoption at an animal shelter. This data is in the file animal_data.csv
.
To try the code out, you'll want to clone the repo, create a Python virtual environment, install dependencies and start Redis using Docker:
$ git clone https://github.com/redis-developer/redis-om-python-search-demo.git
$ cd redis-om-python-search-demo
$ python3 -m venv venv
$ . ./venv/bin/activate
$ pip install -r requirements.txt
Then, start the Redis Stack container:
$ docker-compose up -d
Now it's time to load the data into Redis and setup the RediSearch index:
$ python load_adoptables.py
You should see output showing the name and Redis key of each animal loaded from animal_data.csv
.
To query the data, run query_adoptables.py
:
$ python query_adoptables.py
You can change which query runs by editing the final four lines of query_adoptables.py
to add/remove comments as needed.
The example queries are as follows:
find_by_name
: Find all animals whosename
field isLuna
find_male_dogs
: Find all animals wheresex
ism
andspecies
isdog
find_dogs_in_age_range
: Find all animals wherespecies
isdog
andage
is 9 or 10find_cats_good_with_children
: Final all animals wherespecies
iscat
andchildren
(good with children) isy
and where the free textdescription
field does not containanxious
ornervous
but does contain words similar toplay
e.g.play
,playful
When you're done with the demo, shut down the Redis server:
$ cd redis-om-python-search-demo
$ docker-compose down