Auto Index and Search Django Model Instances with RediSearch (using redis-search-django)

August 21, 2022




Overview of My Submission

I built an Installable Django Package called redis-search-django as a part of Redis Hackathon on DEV. redis-search-django is a Django package that provides auto indexing and searching capabilities for Django Model instances using RediSearch.

redis-search-django internally uses redis-om-python and redis-py

redis-search-django is Available on Python Package Index (PyPI): https://pypi.org/project/redis-search-django/

You can install it by running: pip install redis-search-django



Features

  • Management Command to create, update and populate the RediSearch Index.
  • Auto Index on Model object Create, Update and Delete.
  • Auto Index on Related Model object Add, Update, Remove and Delete.
  • Easy to create Document classes (Uses Django Model Form Class like structure).
  • Index nested models (e.g: OneToOneField, ForeignKey and ManyToManyField).
  • Search documents using redis-om.
  • Search Result Pagination.
  • Search Result Sorting.
  • RediSearch Result to Django QuerySet.
  • Faceted Search.



Submission Category:

Wacky Wildcards
(Because a Django Package does not fit into other Categories)



Language Used



Link to Code

Django Package Repository:

Django package that provides auto indexing and searching capabilities for Django model instances using RediSearch.

Pypi Version
Supported Python Versions
Supported Django Versions
License

Django Tests
Codecov
pre-commit.ci
Changelog-CI
Code Style

A Django package that provides auto indexing and searching capabilities for Django model instances using RediSearch.

  • Management Command to create, update and populate the RediSearch Index.
  • Auto Index on Model object Create, Update and Delete.
  • Auto Index on Related Model object Add, Update, Remove and Delete.
  • Easy to create Document classes (Uses Django Model Form Class like structure).
  • Index nested models (e.g: OneToOneField, ForeignKey and ManyToManyField).
  • Search documents using redis-om.
  • Search Result Pagination.
  • Search Result Sorting.
  • RediSearch Result to Django QuerySet.
  • Faceted Search.
  • Python: 3.7, 3.8, 3.9, 3.10
  • Django: 3.2, 4.0, 4.1
  • redis-om: >= 0.0.27

Downloading Redis

The latest version of Redis is available from Redis.io. You can also install Redis with your operating system’s package manager.

RediSearch and RedisJSON

redis-search-django relies on the RediSearch and RedisJSON Redis modules to support rich queries and embedded models
You need these Redis…

Demo App Repository:
(README file contains the details as per Hackathon Requirements)

I built an Installable Django Package called redis-search-django as a part of Redis Hackathon on DEV
redis-search-django is a package that provides auto indexing and searching capabilities for Django model instances using RediSearch.

This is a Demo App that uses redis-search-django package to Showcase a Product Search Engine with auto indexing and searching.

redis-search-django Documentation: https://github.com/saadmk11/redis-search-django

Features

  • Management Command to create, update and populate the RediSearch Index.
  • Auto Index on Model object Create, Update and Delete.
  • Auto Index on Related Model object Add, Update, Remove and Delete.
  • Easy to create Document classes (Uses Django Model Form Class like structure).
  • Index nested models (e.g: OneToOneField, ForeignKey and ManyToManyField).
  • Search documents using redis-om.
  • Search Result Pagination.
  • Search Result Sorting.
  • RediSearch Result to Django QuerySet.
  • Faceted Search.

App Screenshot

RediSearch Django

How it works

Create Search



Additional Resources / Info



How to use it

Create Search Document from Django Model. (Using redis-search-django)

1. For Django Model:

# models.py

from django.db import models


class Category(models.Model):
    name = models.CharField(max_length=32)
    slug = models.SlugField(max_length=64)

    def __str__(self) -> str:
        return self.name
Enter fullscreen modeExit fullscreen mode

2. You can create a document class like this:

# documents.py

from redis_search_django.documents import JsonDocument

from .models import Category


class CategoryDocument(JsonDocument):
    class Django:
        model = Category
        fields = ["name", "slug"]
Enter fullscreen modeExit fullscreen mode

3. Run Django Management Command Index to create the index on Redis (Only need to run once to generate Index Schema on Redis):

python manage.py index
Enter fullscreen modeExit fullscreen mode

Note: This will also populate the index with existing data from the database

Now category objects will be indexed automatically using Redis on create/update/delete events.

More Complex Examples Can be found here: https://github.com/saadmk11/redis-search-django



Screenshot of the Demo App:

Image description




Source link

Comments 0

Leave a Reply

Your email address will not be published. Required fields are marked *