I believe I've found a miss in the resolver.
Currently, I can't seem to do the following when a field is numeric:
class MyModel(JSONModel):
my_field: int = Field(index=True)
MyModel(my_field=1).save()
assert MyModel.find(MyModel.my_field << [1,2,3,4]).all() == []
It does work when my_field is a string, but I expect it to work for numerics as well.
I've experimented and added the following code:
elif op is Operators.IN:
result += "|".join(map(lambda v: f"(@{field_name}: [{v} {v}])", value))
to
|
elif field_type is RediSearchFieldTypes.NUMERIC: |
|
if op is Operators.EQ: |
|
result += f"@{field_name}:[{value} {value}]" |
|
elif op is Operators.NE: |
|
result += f"-(@{field_name}:[{value} {value}])" |
|
elif op is Operators.GT: |
|
result += f"@{field_name}:[({value} +inf]" |
|
elif op is Operators.LT: |
|
result += f"@{field_name}:[-inf ({value}]" |
|
elif op is Operators.GE: |
|
result += f"@{field_name}:[{value} +inf]" |
|
elif op is Operators.LE: |
|
result += f"@{field_name}:[-inf {value}]" |
I'm quite concerned about the performance of chaining multiple OR expressions, but this is the only way I've found and seen others doing.
I believe I've found a miss in the resolver.
Currently, I can't seem to do the following when a field is numeric:
It does work when
my_fieldis a string, but I expect it to work for numerics as well.I've experimented and added the following code:
to
redis-om-python/aredis_om/model/model.py
Lines 545 to 557 in 4ee61cb
I'm quite concerned about the performance of chaining multiple OR expressions, but this is the only way I've found and seen others doing.