@@ -47,6 +47,7 @@ class Member(BaseHashModel):
47
47
email : str = Field (index = True )
48
48
join_date : datetime .date
49
49
age : int = Field (index = True )
50
+ bio : str = Field (index = True , full_text_search = True )
50
51
51
52
class Meta :
52
53
model_key_prefix = "member"
@@ -67,6 +68,7 @@ async def members(m):
67
68
68
69
age = 38 ,
69
70
join_date = today ,
71
+ bio = "This is member 1 whose greatness makes him the life and soul of any party he goes to." ,
70
72
)
71
73
72
74
member2 = m .Member (
@@ -75,6 +77,7 @@ async def members(m):
75
77
76
78
age = 34 ,
77
79
join_date = today ,
80
+ bio = "This is member 2 who can be quite anxious until you get to know them." ,
78
81
)
79
82
80
83
member3 = m .Member (
@@ -83,6 +86,7 @@ async def members(m):
83
86
84
87
age = 100 ,
85
88
join_date = today ,
89
+ bio = "This is member 3 who is a funny and lively sort of person." ,
86
90
)
87
91
await member1 .save ()
88
92
await member2 .save ()
@@ -124,6 +128,21 @@ async def test_exact_match_queries(members, m):
124
128
).all ()
125
129
assert actual == [member2 ]
126
130
131
+ @pytest .mark .asyncio
132
+ async def test_full_text_search_queries (members , m ):
133
+ member1 , member2 , member3 = members
134
+
135
+ actual = await (
136
+ m .Member .find (m .Member .bio % "great" ).all ()
137
+ )
138
+
139
+ assert actual == [member1 ]
140
+
141
+ actual = await (
142
+ m .Member .find (~ (m .Member .bio % "anxious" )).all ()
143
+ )
144
+
145
+ assert actual == [member1 , member3 ]
127
146
128
147
@pytest .mark .asyncio
129
148
async def test_recursive_query_resolution (members , m ):
@@ -163,6 +182,7 @@ async def test_tag_queries_punctuation(m):
163
182
email = "a|[email protected] " ,
# NOTE: This string uses the TAG field separator.
164
183
age = 38 ,
165
184
join_date = today ,
185
+ bio = "This is a test user on our system." ,
166
186
)
167
187
await member1 .save ()
168
188
@@ -172,6 +192,7 @@ async def test_tag_queries_punctuation(m):
172
192
email = "a|[email protected] " ,
# NOTE: This string uses the TAG field separator.
173
193
age = 38 ,
174
194
join_date = today ,
195
+ bio = "This is a villain, they are a really bad person!" ,
175
196
)
176
197
await member2 .save ()
177
198
@@ -334,6 +355,7 @@ def test_validation_passes(m):
334
355
335
356
join_date = today ,
336
357
age = 38 ,
358
+ bio = "This is the bio field." ,
337
359
)
338
360
assert member .first_name == "Andrew"
339
361
@@ -346,6 +368,7 @@ async def test_saves_model_and_creates_pk(m):
346
368
347
369
join_date = today ,
348
370
age = 38 ,
371
+ bio = "This is the bio field for this user." ,
349
372
)
350
373
# Save a model instance to Redis
351
374
await member .save ()
@@ -408,13 +431,15 @@ async def test_saves_many(m):
408
431
409
432
join_date = today ,
410
433
age = 38 ,
434
+ bio = "This is the user bio." ,
411
435
)
412
436
member2 = m .Member (
413
437
first_name = "Kim" ,
414
438
last_name = "Brookins" ,
415
439
416
440
join_date = today ,
417
441
age = 34 ,
442
+ bio = "This is the bio for Kim." ,
418
443
)
419
444
members = [member1 , member2 ]
420
445
result = await m .Member .add (members )
@@ -482,5 +507,5 @@ class Address(m.BaseHashModel):
482
507
483
508
assert (
484
509
Address .redisearch_schema ()
485
- == f"ON HASH PREFIX 1 { key_prefix } SCHEMA pk TAG SEPARATOR | a_string TAG SEPARATOR | a_full_text_string TAG SEPARATOR | a_full_text_string_fts TEXT an_integer NUMERIC SORTABLE a_float NUMERIC"
510
+ == f"ON HASH PREFIX 1 { key_prefix } SCHEMA pk TAG SEPARATOR | a_string TAG SEPARATOR | a_full_text_string TAG SEPARATOR | a_full_text_string AS a_full_text_string_fts TEXT an_integer NUMERIC SORTABLE a_float NUMERIC"
486
511
)
0 commit comments