diff --git a/redis/commands/search/field.py b/redis/commands/search/field.py index 45cd403e49..b66b1bc3a0 100644 --- a/redis/commands/search/field.py +++ b/redis/commands/search/field.py @@ -52,14 +52,14 @@ def __init__( self.args_suffix = list() self.as_name = as_name - if sortable: - self.args_suffix.append(Field.SORTABLE) if no_index: self.args_suffix.append(Field.NOINDEX) if index_missing: self.args_suffix.append(Field.INDEX_MISSING) if index_empty: self.args_suffix.append(Field.INDEX_EMPTY) + if sortable: + self.args_suffix.append(Field.SORTABLE) if no_index and not sortable: raise ValueError("Non-Sortable non-Indexable fields are ignored") diff --git a/tests/test_asyncio/test_search.py b/tests/test_asyncio/test_search.py index 0004f9ba75..7f11710cc4 100644 --- a/tests/test_asyncio/test_search.py +++ b/tests/test_asyncio/test_search.py @@ -671,6 +671,23 @@ async def test_no_index(decoded_r: redis.Redis): TagField("name", no_index=True, sortable=False) +@pytest.mark.redismod +@skip_if_server_version_lt("7.4.0") +@skip_ifmodversion_lt("2.10.0", "search") +async def test_create_index_empty_or_missing_fields_with_sortable( + decoded_r: redis.Redis, +): + definition = IndexDefinition(prefix=["property:"], index_type=IndexType.HASH) + + fields = [ + TextField("title", sortable=True, index_empty=True), + TagField("features", index_missing=True, sortable=True), + TextField("description", no_index=True, sortable=True), + ] + + await decoded_r.ft().create_index(fields, definition=definition) + + @pytest.mark.redismod async def test_explain(decoded_r: redis.Redis): await decoded_r.ft().create_index( diff --git a/tests/test_search.py b/tests/test_search.py index c28b4aa932..b76baf10aa 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -2710,6 +2710,21 @@ def test_search_missing_fields(client): _assert_search_result(client, res, ["property:1", "property:2"]) +@pytest.mark.redismod +@skip_if_server_version_lt("7.4.0") +@skip_ifmodversion_lt("2.10.0", "search") +def test_create_index_empty_or_missing_fields_with_sortable(client): + definition = IndexDefinition(prefix=["property:"], index_type=IndexType.HASH) + + fields = [ + TextField("title", sortable=True, index_empty=True), + TagField("features", index_missing=True, sortable=True), + TextField("description", no_index=True, sortable=True), + ] + + client.ft().create_index(fields, definition=definition) + + @pytest.mark.redismod @skip_if_server_version_lt("7.4.0") @skip_ifmodversion_lt("2.10.0", "search")