diff --git a/redisvl/query/filter.py b/redisvl/query/filter.py index 4ef2c0e6..1e8987ff 100644 --- a/redisvl/query/filter.py +++ b/redisvl/query/filter.py @@ -375,9 +375,8 @@ def __le__(self, other: int) -> "FilterExpression": def __str__(self) -> str: """Return the Redis Query string for the Numeric filter""" - if not self._value: + if self._value is None: return "*" - if self._operator == FilterOperator.EQ or self._operator == FilterOperator.NE: return self.OPERATOR_MAP[self._operator] % ( self._field, diff --git a/tests/integration/test_query.py b/tests/integration/test_query.py index 3cef9d83..9acc98f5 100644 --- a/tests/integration/test_query.py +++ b/tests/integration/test_query.py @@ -400,3 +400,17 @@ def test_sort_vector_query(index, sorted_vector_query): def test_sort_range_query(index, sorted_range_query): t = Text("job") % "" search(sorted_range_query, index, t, 7, sort=True) + +def test_query_with_chunk_number_zero(): + doc_base_id = "8675309" + file_id = "e9ffbac9ff6f67cc" + chunk_num = 0 + + filter_conditions = ( + (Tag("doc_base_id") == doc_base_id) & + (Tag("file_id") == file_id) & + (Num("chunk_number") == chunk_num) + ) + + expected_query_str = '((@doc_base_id:{8675309} @file_id:{e9ffbac9ff6f67cc}) @chunk_number:[0 0])' + assert str(filter_conditions) == expected_query_str, "Query with chunk_number zero is incorrect" diff --git a/tests/unit/test_filter.py b/tests/unit/test_filter.py index 42088bde..fce2783f 100644 --- a/tests/unit/test_filter.py +++ b/tests/unit/test_filter.py @@ -285,3 +285,7 @@ def test_filters_combination(): tf3 = Text("text_field") == None tf4 = Geo("geo_field") == GeoRadius(1.0, 2.0, 3, "km") assert str(tf1 & tf2 & tf3 & tf4) == str(tf1 & tf4) + +def test_num_filter_zero(): + num_filter = Num("chunk_number") == 0 + assert str(num_filter) == "@chunk_number:[0 0]", "Num filter should handle zero correctly" \ No newline at end of file