-
Notifications
You must be signed in to change notification settings - Fork 123
Open
Description
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
redis-om-python/aredis_om/model/model.py
Lines 545 to 557 in 4ee61cb
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.
Metadata
Metadata
Assignees
Labels
No labels