@@ -54,196 +54,140 @@ def default_stopwords_schema():
5454 }
5555
5656
57- def test_create_index_with_stopwords_disabled (client , stopwords_disabled_schema ):
58- """Test creating an index with STOPWORDS 0."""
57+ @pytest .fixture
58+ def stopwords_disabled_index (client , stopwords_disabled_schema ):
59+ """Index fixture with stopwords disabled."""
5960 schema = IndexSchema .from_dict (stopwords_disabled_schema )
6061 index = SearchIndex (schema , redis_client = client )
62+ index .create (overwrite = True , drop = True )
6163
62- try :
63- # Create the index
64- index .create (overwrite = True , drop = True )
65-
66- # Verify index was created
67- assert index .exists ()
64+ yield index
6865
69- # Get FT.INFO and verify stopwords_list is empty
70- info = client .ft (index .name ).info ()
71- assert "stopwords_list" in info
72- assert info ["stopwords_list" ] == []
66+ index .delete (drop = True )
7367
74- finally :
75- try :
76- index .delete (drop = True )
77- except Exception :
78- # Silently ignore cleanup errors (e.g., index already deleted or never created)
79- pass
8068
81-
82- def test_create_index_with_custom_stopwords (client , custom_stopwords_schema ):
83- """Test creating an index with custom stopwords list ."""
69+ @ pytest . fixture
70+ def custom_stopwords_index (client , custom_stopwords_schema ):
71+ """Index fixture with custom stopwords."""
8472 schema = IndexSchema .from_dict (custom_stopwords_schema )
8573 index = SearchIndex (schema , redis_client = client )
74+ index .create (overwrite = True , drop = True )
8675
87- try :
88- # Create the index
89- index .create (overwrite = True , drop = True )
90-
91- # Verify index was created
92- assert index .exists ()
93-
94- # Get FT.INFO and verify stopwords_list matches
95- info = client .ft (index .name ).info ()
96- assert "stopwords_list" in info
97-
98- # Convert bytes to strings for comparison
99- stopwords_list = [
100- sw .decode ("utf-8" ) if isinstance (sw , bytes ) else sw
101- for sw in info ["stopwords_list" ]
102- ]
103- assert set (stopwords_list ) == {"the" , "a" , "an" }
76+ yield index
10477
105- finally :
106- try :
107- index .delete (drop = True )
108- except Exception :
109- # Silently ignore cleanup errors (e.g., index already deleted or never created)
110- pass
78+ index .delete (drop = True )
11179
11280
113- def test_create_index_with_default_stopwords (client , default_stopwords_schema ):
114- """Test creating an index with default stopwords (no STOPWORDS clause)."""
81+ @pytest .fixture
82+ def default_stopwords_index (client , default_stopwords_schema ):
83+ """Index fixture with default stopwords."""
11584 schema = IndexSchema .from_dict (default_stopwords_schema )
11685 index = SearchIndex (schema , redis_client = client )
86+ index .create (overwrite = True , drop = True )
11787
118- try :
119- # Create the index
120- index .create (overwrite = True , drop = True )
88+ yield index
12189
122- # Verify index was created
123- assert index .exists ()
90+ index .delete (drop = True )
12491
125- # When no STOPWORDS clause is used, Redis doesn't include stopwords_list in FT.INFO
126- # (or it may include the default list depending on Redis version)
127- # We just verify the index was created successfully with default behavior
128-
129- finally :
130- try :
131- index .delete (drop = True )
132- except Exception :
133- # Silently ignore cleanup errors (e.g., index already deleted or never created)
134- pass
13592
93+ def test_create_index_with_stopwords_disabled (client , stopwords_disabled_index ):
94+ """Test creating an index with STOPWORDS 0."""
95+ # Verify index was created
96+ assert stopwords_disabled_index .exists ()
13697
137- def test_from_existing_preserves_stopwords_disabled ( client , stopwords_disabled_schema ):
138- """Test that from_existing() correctly reconstructs stopwords=[] configuration."""
139- schema = IndexSchema . from_dict ( stopwords_disabled_schema )
140- index = SearchIndex ( schema , redis_client = client )
98+ # Get FT.INFO and verify stopwords_list is empty
99+ info = client . ft ( stopwords_disabled_index . name ). info ()
100+ assert "stopwords_list" in info
101+ assert info [ "stopwords_list" ] == []
141102
142- try :
143- # Create the index
144- index .create (overwrite = True , drop = True )
145103
146- # Reconstruct from existing
147- reconstructed_index = SearchIndex .from_existing (index .name , redis_client = client )
104+ def test_create_index_with_custom_stopwords (client , custom_stopwords_index ):
105+ """Test creating an index with custom stopwords list."""
106+ # Verify index was created
107+ assert custom_stopwords_index .exists ()
148108
149- # Verify stopwords configuration was preserved
150- assert reconstructed_index .schema .index .stopwords == []
109+ # Get FT.INFO and verify stopwords_list matches
110+ info = client .ft (custom_stopwords_index .name ).info ()
111+ assert "stopwords_list" in info
151112
152- finally :
153- try :
154- index . delete ( drop = True )
155- except Exception :
156- # Silently ignore cleanup errors (e.g., index already deleted or never created)
157- pass
113+ # Convert bytes to strings for comparison
114+ stopwords_list = [
115+ sw . decode ( "utf-8" ) if isinstance ( sw , bytes ) else sw
116+ for sw in info [ "stopwords_list" ]
117+ ]
118+ assert set ( stopwords_list ) == { "the" , "a" , "an" }
158119
159120
160- def test_from_existing_preserves_custom_stopwords ( client , custom_stopwords_schema ):
161- """Test that from_existing() correctly reconstructs custom stopwords configuration ."""
162- schema = IndexSchema . from_dict ( custom_stopwords_schema )
163- index = SearchIndex ( schema , redis_client = client )
121+ def test_create_index_with_default_stopwords ( default_stopwords_index ):
122+ """Test creating an index with default stopwords (no STOPWORDS clause) ."""
123+ # Verify index was created
124+ assert default_stopwords_index . exists ( )
164125
165- try :
166- # Create the index
167- index . create ( overwrite = True , drop = True )
126+ # When no STOPWORDS clause is used, Redis doesn't include stopwords_list in FT.INFO
127+ # (or it may include the default list depending on Redis version)
128+ # We just verify the index was created successfully with default behavior
168129
169- # Reconstruct from existing
170- reconstructed_index = SearchIndex .from_existing (index .name , redis_client = client )
171130
172- # Verify stopwords configuration was preserved
173- assert set (reconstructed_index .schema .index .stopwords ) == {"the" , "a" , "an" }
131+ def test_from_existing_preserves_stopwords_disabled (client , stopwords_disabled_index ):
132+ """Test that from_existing() correctly reconstructs stopwords=[] configuration."""
133+ # Reconstruct from existing
134+ reconstructed_index = SearchIndex .from_existing (
135+ stopwords_disabled_index .name , redis_client = client
136+ )
174137
175- finally :
176- try :
177- index .delete (drop = True )
178- except Exception :
179- # Silently ignore cleanup errors (e.g., index already deleted or never created)
180- pass
138+ # Verify stopwords configuration was preserved
139+ assert reconstructed_index .schema .index .stopwords == []
181140
182141
183- def test_from_existing_default_stopwords (client , default_stopwords_schema ):
184- """Test that from_existing() handles default stopwords (no stopwords_list in FT.INFO)."""
185- schema = IndexSchema .from_dict (default_stopwords_schema )
186- index = SearchIndex (schema , redis_client = client )
142+ def test_from_existing_preserves_custom_stopwords (client , custom_stopwords_index ):
143+ """Test that from_existing() correctly reconstructs custom stopwords configuration."""
144+ # Reconstruct from existing
145+ reconstructed_index = SearchIndex .from_existing (
146+ custom_stopwords_index .name , redis_client = client
147+ )
187148
188- try :
189- # Create the index
190- index .create (overwrite = True , drop = True )
149+ # Verify stopwords configuration was preserved
150+ assert set (reconstructed_index .schema .index .stopwords ) == {"the" , "a" , "an" }
191151
192- # Reconstruct from existing
193- reconstructed_index = SearchIndex .from_existing (index .name , redis_client = client )
194152
195- # Verify stopwords is None (default behavior)
196- assert reconstructed_index .schema .index .stopwords is None
153+ def test_from_existing_default_stopwords (client , default_stopwords_index ):
154+ """Test that from_existing() handles default stopwords (no stopwords_list in FT.INFO)."""
155+ # Reconstruct from existing
156+ reconstructed_index = SearchIndex .from_existing (
157+ default_stopwords_index .name , redis_client = client
158+ )
197159
198- finally :
199- try :
200- index .delete (drop = True )
201- except Exception :
202- # Silently ignore cleanup errors (e.g., index already deleted or never created)
203- pass
160+ # Verify stopwords is None (default behavior)
161+ assert reconstructed_index .schema .index .stopwords is None
204162
205163
206164def test_stopwords_disabled_allows_searching_common_words (
207- client , stopwords_disabled_schema
165+ client , stopwords_disabled_index
208166):
209167 """Test that STOPWORDS 0 allows searching for common stopwords like 'the', 'a', 'of'."""
210- schema = IndexSchema .from_dict (stopwords_disabled_schema )
211- index = SearchIndex (schema , redis_client = client )
168+ # Add test data with common stopwords
169+ test_data = [
170+ {"title" : "Bank of America" , "description" : "A major bank" },
171+ {"title" : "The Great Gatsby" , "description" : "A classic novel" },
172+ {
173+ "title" : "An Introduction to Python" ,
174+ "description" : "A programming guide" ,
175+ },
176+ ]
177+
178+ for i , data in enumerate (test_data ):
179+ key = f"test_sw_disabled:{ i } "
180+ client .hset (key , mapping = data )
181+
182+ # Search for "of" - should find "Bank of America"
183+ from redisvl .query import FilterQuery
184+
185+ query = FilterQuery (
186+ filter_expression = "@title:(of)" ,
187+ return_fields = ["title" ],
188+ )
189+ results = stopwords_disabled_index .search (query .query , query_params = query .params )
212190
213- try :
214- # Create the index
215- index .create (overwrite = True , drop = True )
216-
217- # Add test data with common stopwords
218- test_data = [
219- {"title" : "Bank of America" , "description" : "A major bank" },
220- {"title" : "The Great Gatsby" , "description" : "A classic novel" },
221- {
222- "title" : "An Introduction to Python" ,
223- "description" : "A programming guide" ,
224- },
225- ]
226-
227- for i , data in enumerate (test_data ):
228- key = f"test_sw_disabled:{ i } "
229- client .hset (key , mapping = data )
230-
231- # Search for "of" - should find "Bank of America"
232- from redisvl .query import FilterQuery
233-
234- query = FilterQuery (
235- filter_expression = "@title:(of)" ,
236- return_fields = ["title" ],
237- )
238- results = index .search (query .query , query_params = query .params )
239-
240- # With STOPWORDS 0, "of" should be indexed and searchable
241- assert len (results .docs ) > 0
242- assert any ("of" in doc .title .lower () for doc in results .docs )
243-
244- finally :
245- try :
246- index .delete (drop = True )
247- except Exception :
248- # Silently ignore cleanup errors (e.g., index already deleted or never created)
249- pass
191+ # With STOPWORDS 0, "of" should be indexed and searchable
192+ assert len (results .docs ) > 0
193+ assert any ("of" in doc .title .lower () for doc in results .docs )
0 commit comments