This demo showcases the vector search similarity (VSS) capability within Redis Stack and Redis Enterprise. Through the RediSearch module, vector types and indexes can be added to Redis. This turns Redis into a highly performant vector database which can be used for all types of applications.
The following Redis Stack capabilities are available in this demo:
- Vector Similarity Search
- by image
- by text
- Multiple vector indexing types
- HNSW
- Flat (brute-force)
- Hybrid Queries
- Apply tags as pre-filter for vector search
This app was built as a Single Page Application (SPA) with the following components:
- Redis Stack: Vector database + JSON storage
- FastAPI (Python 3.8)
- JWT authentication using OAuth2 "password flow" and PyJWT
- Pydantic for schema and validation
- React (with Typescript)
- Redis OM for ORM
- Docker Compose for development
- MaterialUI for some UI elements
- React-Bootstrap for some UI elements
- react-admin for the admin dashboard
- Using the same token based authentication as FastAPI backend (JWT)
- Pytorch/Img2Vec and Huggingface Sentence Transformers for vector embedding creation
Some inspiration was taken from this Cookiecutter project and turned into a SPA application instead of a separate front-end server approach.
The dataset was taken from the the following Kaggle links.
Before running the app, install Docker Desktop.
-
Get your Redis Cloud Database (if needed).
-
Export Redis Endpoint Environment Variables:
$ export REDIS_HOST=your-redis-host $ export REDIS_PORT=your-redis-port $ export REDIS_PASSOWRD=your-redis-password
-
Run the App:
$ docker compose -f docker-cloud-redis.yml up
The benefit of this approach is that the db will persist beyond application runs. So you can make updates and re run the app without having to provision the dataset or create another search index.
$ docker compose -f docker-local-redis.yml up
You can use the Jupyter Notebook in the data/
directory to create product embeddings and product metadata JSON files. Both files will end up stored in the data/
directory and used when creating your own container.
Create your own containers using the build.sh
script and then make sure to update the .yml
file with the right image name.
It's typically easier to write front end code in an interactive environment, testing changes in realtime.
- Deploy the app using steps above.
- Install NPM packages (you may need to use
npm
to installyarn
)$ cd gui/ $ yarn install --no-optional
- Use
yarn
to serve the application from your machine$ yarn start
- Navigate to
http://localhost:3000
in a browser.
All changes to your local code will be reflected in your display in semi realtime.
Sometimes you need to clear out some Docker cached artifacts. Run docker system prune
, restart Docker Desktop, and try again.
Open an issue here on GitHub and we will try to be responsive to these. Additionally, please consider contributing.