@@ -99,3 +99,50 @@ func TestCollectionSearchRange(t *testing.T) {
9999
100100 require .Equal (t , expectedDocs , docs )
101101}
102+
103+ func TestCollectionGroupByStringArray (t * testing.T ) {
104+ collectionName := "tags"
105+ _ , err := typesenseClient .Collection (collectionName ).Delete ()
106+
107+ schema := & api.CollectionSchema {
108+ Name : collectionName ,
109+ Fields : []api.Field {
110+ {
111+ Name : "tags" ,
112+ Type : "string[]" ,
113+ Facet : pointer .True (),
114+ },
115+ },
116+ }
117+
118+ _ , err = typesenseClient .Collections ().Create (schema )
119+ require .NoError (t , err )
120+
121+ type docWithArray struct {
122+ ID string `json:"id"`
123+ Tags []string `json:"tags"`
124+ }
125+
126+ documents := []interface {}{
127+ & docWithArray {
128+ ID : "1" ,
129+ Tags : []string {"go" , "programming" , "example" },
130+ },
131+ }
132+
133+ params := & api.ImportDocumentsParams {Action : pointer .String ("create" )}
134+ _ , err = typesenseClient .Collection (collectionName ).Documents ().Import (documents , params )
135+ require .NoError (t , err )
136+
137+ searchParams := & api.SearchCollectionParams {
138+ Q : "*" ,
139+ GroupBy : pointer .String ("tags" ),
140+ }
141+
142+ result , err := typesenseClient .Collection (collectionName ).Documents ().Search (searchParams )
143+ require .NoError (t , err )
144+
145+ require .NoError (t , err )
146+ require .Equal (t , 1 , * result .Found , "found documents number is invalid" )
147+ require .Equal (t , 1 , len (* result .GroupedHits ), "number of grouped hits is invalid" )
148+ }
0 commit comments