@@ -135,6 +135,61 @@ def test_synonyms(self):
135135 task = self .index .search_synonyms ('' , hits_per_page = 5 )
136136 self .assertEqual (0 , int (task ['nbHits' ]))
137137
138+ def test_facet_search (self ):
139+ settings = {'attributesForFacetting' : ['searchable(series)' , 'kind' ]}
140+ objects = [
141+ {
142+ 'objectID' : '1' ,
143+ 'name' : 'Snoopy' ,
144+ 'kind' : [ 'dog' , 'animal' ],
145+ 'born' : 1950 ,
146+ 'series' : 'Peanuts'
147+ },
148+ {
149+ 'objectID' : '2' ,
150+ 'name' : 'Woodstock' ,
151+ 'kind' : ['bird' , 'animal' ],
152+ 'born' : 1960 ,
153+ 'series' : 'Peanuts'
154+ },
155+ {
156+ 'objectID' : '3' ,
157+ 'name' : 'Charlie Brown' ,
158+ 'kind' : [ 'human' ],
159+ 'born' : 1950 ,
160+ 'series' : 'Peanuts'
161+ },
162+ {
163+ 'objectID' : '4' ,
164+ 'name' : 'Hobbes' ,
165+ 'kind' : ['tiger' , 'animal' , 'teddy' ],
166+ 'born' : 1985 ,
167+ 'series' : 'Calvin & Hobbes'
168+ },
169+ {
170+ 'objectID' : '5' ,
171+ 'name' : 'Calvin' ,
172+ 'kind' : [ 'human' ],
173+ 'born' : 1985 ,
174+ 'series' : 'Calvin & Hobbes'
175+ }
176+ ]
177+
178+ self .index .set_settings (settings )
179+ task = self .index .add_objects (objects )
180+ self .index .wait_task (task ['taskID' ])
181+
182+ # Straightforward search.
183+ facetHits = self .index .search_facet ('series' , 'Hobb' )['facetHits' ]
184+ self .assertEqual (len (facetHits ), 1 )
185+ self .assertEqual (facetHits [0 ]['value' ], 'Calvin & Hobbes' )
186+ self .assertEqual (facetHits [0 ]['count' ], 2 )
187+
188+ # Using an addition query to restrict search.
189+ query = {'facetFilters' : 'kind:animal' , 'numericFilters' : 'born >= 1955' }
190+ facetHits = self .index .search_facet ('series' , 'Peanutz' , query )['facetHits' ]
191+ self .assertEqual (facetHits [0 ]['value' ], 'Peanuts' )
192+ self .assertEqual (facetHits [0 ]['count' ], 1 )
138193
139194class IndexWithReadOnlyDataTest (IndexTest ):
140195 """Tests that use one index with initial data (read only)."""
0 commit comments