Skip to content

Commit 20bdf4d

Browse files
authored
Fixing SORTABLE, INDEXEMPTY and INDEXMISSING order when using RediSearch fields (#3810)
1 parent 29b4d5d commit 20bdf4d

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

redis/commands/search/field.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ def __init__(
5252
self.args_suffix = list()
5353
self.as_name = as_name
5454

55-
if sortable:
56-
self.args_suffix.append(Field.SORTABLE)
5755
if no_index:
5856
self.args_suffix.append(Field.NOINDEX)
5957
if index_missing:
6058
self.args_suffix.append(Field.INDEX_MISSING)
6159
if index_empty:
6260
self.args_suffix.append(Field.INDEX_EMPTY)
61+
if sortable:
62+
self.args_suffix.append(Field.SORTABLE)
6363

6464
if no_index and not sortable:
6565
raise ValueError("Non-Sortable non-Indexable fields are ignored")

tests/test_asyncio/test_search.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,23 @@ async def test_no_index(decoded_r: redis.Redis):
671671
TagField("name", no_index=True, sortable=False)
672672

673673

674+
@pytest.mark.redismod
675+
@skip_if_server_version_lt("7.4.0")
676+
@skip_ifmodversion_lt("2.10.0", "search")
677+
async def test_create_index_empty_or_missing_fields_with_sortable(
678+
decoded_r: redis.Redis,
679+
):
680+
definition = IndexDefinition(prefix=["property:"], index_type=IndexType.HASH)
681+
682+
fields = [
683+
TextField("title", sortable=True, index_empty=True),
684+
TagField("features", index_missing=True, sortable=True),
685+
TextField("description", no_index=True, sortable=True),
686+
]
687+
688+
await decoded_r.ft().create_index(fields, definition=definition)
689+
690+
674691
@pytest.mark.redismod
675692
async def test_explain(decoded_r: redis.Redis):
676693
await decoded_r.ft().create_index(

tests/test_search.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2710,6 +2710,21 @@ def test_search_missing_fields(client):
27102710
_assert_search_result(client, res, ["property:1", "property:2"])
27112711

27122712

2713+
@pytest.mark.redismod
2714+
@skip_if_server_version_lt("7.4.0")
2715+
@skip_ifmodversion_lt("2.10.0", "search")
2716+
def test_create_index_empty_or_missing_fields_with_sortable(client):
2717+
definition = IndexDefinition(prefix=["property:"], index_type=IndexType.HASH)
2718+
2719+
fields = [
2720+
TextField("title", sortable=True, index_empty=True),
2721+
TagField("features", index_missing=True, sortable=True),
2722+
TextField("description", no_index=True, sortable=True),
2723+
]
2724+
2725+
client.ft().create_index(fields, definition=definition)
2726+
2727+
27132728
@pytest.mark.redismod
27142729
@skip_if_server_version_lt("7.4.0")
27152730
@skip_ifmodversion_lt("2.10.0", "search")

0 commit comments

Comments
 (0)