redis-om-python icon indicating copy to clipboard operation
redis-om-python copied to clipboard

find() does not work when object index contains either boolean or timedelta fields

Open user529481 opened this issue 2 years ago • 0 comments

Hi,

Thanks for writing this library, it's made made my life a bit easier. I came across some unusual behavior while I was using this library, notably find() does not work on any field with my data model below. It wasn't until I removed the index on the four timedelta and bool fields did find() start to work again. The get() method worked throughout.

find() does not work with this data model:

from typing import Dict, Optional, List, Set
from redis_om import JsonModel, Field

class Example(JsonModel):
    id           : str       = Field(primary_key=True, index=True)
    members      : List[str] = Field(index=True, default=[])
    friends      : List[str] = Field(index=True, default=[])
    dependencies : List[str] = Field(index=True)
    textfieldA   : str       = Field(index=True)
    date_start   : date      = Field(index=True)
    date_end     : Optional[date]
    textfieldB   : str       = Field(index=True)
    timefieldA   : timedelta = Field(index=True)
    timefieldB   : timedelta = Field(index=True)
    boolfieldA   : bool      = Field(index=True)
    boolfieldB   : bool      = Field(index=True)
    last_updated : date      = Field(index=True, default=date(1990, 1,1))

find() does work after removing index on timedelta and bool fields. Removing either type doesn't not fix the issue, indices on both types need to be removed in order to find() to work again:

class Example(JsonModel):
    id           : str       = Field(primary_key=True, index=True)
    members      : List[str] = Field(index=True, default=[])
    friends      : List[str] = Field(index=True, default=[])
    dependencies : List[str] = Field(index=True)
    textfieldA   : str       = Field(index=True)
    date_start   : date      = Field(index=True)
    date_end     : Optional[date]
    textfieldB   : str       = Field(index=True)
    timefieldA   : timedelta
    timefieldB   : timedelta
    boolfieldA   : bool
    boolfieldB   : bool
    last_updated : date      = Field(index=True, default=date(1990, 1,1))

Version Information: Python: 3.11.5 redis-om-python: 0.2.1 OS: macOS Sonoma 14.0 (Apple Silicon)

user529481 avatar Dec 07 '23 20:12 user529481