redis / redis-om-python

Object mapping, and more, for Redis and Python
MIT License
1.11k stars 112 forks source link

Give priority to list of keywords if exists else return available #530

Closed ajs-88 closed 1 year ago

ajs-88 commented 1 year ago

Hi Redisons & Pythoneers,

Hope you are doing well!

Consider i have model called Files,

class Files(JsonModel):
    filename: str = Field(index=True, full_text_search=True)
    created_at = datetime.datetime.now(pytz.timezone('Asia/Dubai'))

and a list of priority keywords for search results,

priority_keywords = ['folder1', 'folder9']

I want them to be listed first on the results if they exists. If not return other available.

In django framework we could do this by,

from django.db.models import Case, When, IntegerField
from django.db.models.functions import Lower

priority_keywords = ['folder1', 'folder2']
preserved = Case(*[When(filename__icontains=kw, then=pos) for pos, kw in enumerate(PRIORITY_KEYWORDS)], output_field=IntegerField())
queryset = Files.objects.annotate(priority=preserved).order_by('priority', Lower('filename'), '-created_at')

Now, how could we do the similar task in redis-om-python?

please help :)