41 lines
720 B
Go
41 lines
720 B
Go
package search
|
|
|
|
import (
|
|
"encoding/json"
|
|
"voltaserve/infra"
|
|
"voltaserve/model"
|
|
"voltaserve/repo"
|
|
)
|
|
|
|
type UserSearch struct {
|
|
index string
|
|
search *infra.SearchManager
|
|
}
|
|
|
|
func NewUserSearch() *UserSearch {
|
|
return &UserSearch{
|
|
index: infra.UserSearchIndex,
|
|
search: infra.NewSearchManager(),
|
|
}
|
|
}
|
|
|
|
func (s *UserSearch) Query(query string) ([]model.User, error) {
|
|
hits, err := s.search.Query(s.index, query)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res := []model.User{}
|
|
for _, v := range hits {
|
|
b, err := json.Marshal(v)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
user := repo.NewUser()
|
|
if err := json.Unmarshal(b, &user); err != nil {
|
|
return nil, err
|
|
}
|
|
res = append(res, user)
|
|
}
|
|
return res, nil
|
|
}
|