this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Actually apply filters in actor search

+45 -11
+45 -11
search/query.go
··· 103 103 } 104 104 } 105 105 106 - // turns search params in to actual elasticsearch/opensearch filter DSL 106 + // Filters turns search params in to actual elasticsearch/opensearch filter DSL 107 107 func (p *PostSearchParams) Filters() []map[string]interface{} { 108 108 var filters []map[string]interface{} 109 109 ··· 187 187 return filters 188 188 } 189 189 190 + // Filters turns search params in to actual elasticsearch/opensearch filter DSL 191 + func (p *ActorSearchParams) Filters() []map[string]interface{} { 192 + var filters []map[string]interface{} 193 + 194 + if p.Follows != nil && len(p.Follows) > 0 { 195 + follows := make([]string, len(p.Follows)) 196 + for i, did := range p.Follows { 197 + follows[i] = did.String() 198 + } 199 + filters = append(filters, map[string]interface{}{ 200 + "terms": map[string]interface{}{ 201 + "did": follows, 202 + }, 203 + }) 204 + } 205 + 206 + return filters 207 + } 208 + 190 209 func checkParams(offset, size int) error { 191 210 if offset+size > 10000 || size > 250 || offset > 10000 || offset < 0 || size < 0 { 192 211 return fmt.Errorf("disallowed size/offset parameters") ··· 254 273 return nil, err 255 274 } 256 275 276 + filters := params.Filters() 277 + 257 278 basic := map[string]interface{}{ 258 279 "simple_query_string": map[string]interface{}{ 259 280 "query": params.Query, ··· 281 302 "from": params.Offset, 282 303 } 283 304 305 + if len(filters) > 0 { 306 + query["query"].(map[string]interface{})["bool"].(map[string]interface{})["filter"] = filters 307 + } 308 + 284 309 return doSearch(ctx, escli, index, query) 285 310 } 286 311 ··· 292 317 return nil, err 293 318 } 294 319 320 + filters := params.Filters() 321 + 295 322 query := map[string]interface{}{ 296 323 "query": map[string]interface{}{ 297 - "multi_match": map[string]interface{}{ 298 - "query": params.Query, 299 - "type": "bool_prefix", 300 - "operator": "and", 301 - "fields": []string{ 302 - // adding handle here improves relevency but may be too expensive in prod 303 - //"handle^2", 304 - "typeahead", 305 - "typeahead._2gram", 306 - "typeahead._3gram", 324 + "bool": map[string]interface{}{ 325 + "must": map[string]interface{}{ 326 + "multi_match": map[string]interface{}{ 327 + "query": params.Query, 328 + "type": "bool_prefix", 329 + "operator": "and", 330 + "fields": []string{ 331 + "typeahead", 332 + "typeahead._2gram", 333 + "typeahead._3gram", 334 + }, 335 + }, 307 336 }, 308 337 }, 309 338 }, 310 339 "size": params.Size, 340 + "from": params.Offset, 341 + } 342 + 343 + if len(filters) > 0 { 344 + query["query"].(map[string]interface{})["bool"].(map[string]interface{})["filter"] = filters 311 345 } 312 346 313 347 return doSearch(ctx, escli, index, query)