Skip to content

Commit 2cea637

Browse files
authored
Add support for WITHSUFFIXTRIE to FT.CREATE (#2324)
* withsuffixtrie * Update test_search.py * fix
1 parent 34f07a7 commit 2cea637

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

redis/commands/search/field.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def __init__(
6464
weight: float = 1.0,
6565
no_stem: bool = False,
6666
phonetic_matcher: str = None,
67+
withsuffixtrie: bool = False,
6768
**kwargs,
6869
):
6970
Field.__init__(self, name, args=[Field.TEXT, Field.WEIGHT, weight], **kwargs)
@@ -78,6 +79,8 @@ def __init__(
7879
]:
7980
Field.append_arg(self, self.PHONETIC)
8081
Field.append_arg(self, phonetic_matcher)
82+
if withsuffixtrie:
83+
Field.append_arg(self, "WITHSUFFIXTRIE")
8184

8285

8386
class NumericField(Field):
@@ -108,11 +111,18 @@ class TagField(Field):
108111
CASESENSITIVE = "CASESENSITIVE"
109112

110113
def __init__(
111-
self, name: str, separator: str = ",", case_sensitive: bool = False, **kwargs
114+
self,
115+
name: str,
116+
separator: str = ",",
117+
case_sensitive: bool = False,
118+
withsuffixtrie: bool = False,
119+
**kwargs,
112120
):
113121
args = [Field.TAG, self.SEPARATOR, separator]
114122
if case_sensitive:
115123
args.append(self.CASESENSITIVE)
124+
if withsuffixtrie:
125+
args.append("WITHSUFFIXTRIE")
116126

117127
Field.__init__(self, name, args=args, **kwargs)
118128

tests/test_asyncio/test_search.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,30 @@ async def test_aggregations_sort_by_and_limit(modclient: redis.Redis):
10451045
assert res.rows[0] == ["t1", "b"]
10461046

10471047

1048+
@pytest.mark.redismod
1049+
@pytest.mark.experimental
1050+
async def test_withsuffixtrie(modclient: redis.Redis):
1051+
# create index
1052+
assert await modclient.ft().create_index((TextField("txt"),))
1053+
await waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1054+
info = await modclient.ft().info()
1055+
assert "WITHSUFFIXTRIE" not in info["attributes"][0]
1056+
assert await modclient.ft().dropindex("idx")
1057+
1058+
# create withsuffixtrie index (text field)
1059+
assert await modclient.ft().create_index((TextField("t", withsuffixtrie=True)))
1060+
await waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1061+
info = await modclient.ft().info()
1062+
assert "WITHSUFFIXTRIE" in info["attributes"][0]
1063+
assert await modclient.ft().dropindex("idx")
1064+
1065+
# create withsuffixtrie index (tag field)
1066+
assert await modclient.ft().create_index((TagField("t", withsuffixtrie=True)))
1067+
await waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1068+
info = await modclient.ft().info()
1069+
assert "WITHSUFFIXTRIE" in info["attributes"][0]
1070+
1071+
10481072
@pytest.mark.redismod
10491073
@skip_if_redis_enterprise()
10501074
async def test_search_commands_in_pipeline(modclient: redis.Redis):

tests/test_search.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1712,3 +1712,27 @@ def test_expire_while_search(modclient: redis.Redis):
17121712
modclient.ft().search(Query("*")).docs[1]
17131713
time.sleep(1)
17141714
assert 2 == modclient.ft().search(Query("*")).total
1715+
1716+
1717+
@pytest.mark.redismod
1718+
@pytest.mark.experimental
1719+
def test_withsuffixtrie(modclient: redis.Redis):
1720+
# create index
1721+
assert modclient.ft().create_index((TextField("txt"),))
1722+
waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1723+
info = modclient.ft().info()
1724+
assert "WITHSUFFIXTRIE" not in info["attributes"][0]
1725+
assert modclient.ft().dropindex("idx")
1726+
1727+
# create withsuffixtrie index (text fiels)
1728+
assert modclient.ft().create_index((TextField("t", withsuffixtrie=True)))
1729+
waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1730+
info = modclient.ft().info()
1731+
assert "WITHSUFFIXTRIE" in info["attributes"][0]
1732+
assert modclient.ft().dropindex("idx")
1733+
1734+
# create withsuffixtrie index (tag field)
1735+
assert modclient.ft().create_index((TagField("t", withsuffixtrie=True)))
1736+
waitForIndex(modclient, getattr(modclient.ft(), "index_name", "idx"))
1737+
info = modclient.ft().info()
1738+
assert "WITHSUFFIXTRIE" in info["attributes"][0]

0 commit comments

Comments
 (0)