all
This commit is contained in:
123
Downloads/Voltaserve/api/infra/search.go
Normal file
123
Downloads/Voltaserve/api/infra/search.go
Normal file
@ -0,0 +1,123 @@
|
||||
package infra
|
||||
|
||||
import (
|
||||
"voltaserve/config"
|
||||
|
||||
"github.com/meilisearch/meilisearch-go"
|
||||
)
|
||||
|
||||
var searchClient *meilisearch.Client
|
||||
|
||||
const (
|
||||
FileSearchIndex = "file"
|
||||
GroupSearchIndex = "group"
|
||||
WorkspaceSearchIndex = "workspace"
|
||||
OrganizationSearchIndex = "organization"
|
||||
UserSearchIndex = "user"
|
||||
)
|
||||
|
||||
type SearchModel interface {
|
||||
GetID() string
|
||||
}
|
||||
|
||||
type SearchManager struct {
|
||||
config config.SearchConfig
|
||||
}
|
||||
|
||||
func NewSearchManager() *SearchManager {
|
||||
if searchClient == nil {
|
||||
searchClient = meilisearch.NewClient(meilisearch.ClientConfig{
|
||||
Host: config.GetConfig().Search.URL,
|
||||
})
|
||||
if _, err := searchClient.CreateIndex(&meilisearch.IndexConfig{
|
||||
Uid: FileSearchIndex,
|
||||
PrimaryKey: "id",
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.Index(FileSearchIndex).UpdateSettings(&meilisearch.Settings{
|
||||
SearchableAttributes: []string{"name", "text"},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.CreateIndex(&meilisearch.IndexConfig{
|
||||
Uid: GroupSearchIndex,
|
||||
PrimaryKey: "id",
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.Index(GroupSearchIndex).UpdateSettings(&meilisearch.Settings{
|
||||
SearchableAttributes: []string{"name"},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.CreateIndex(&meilisearch.IndexConfig{
|
||||
Uid: WorkspaceSearchIndex,
|
||||
PrimaryKey: "id",
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.Index(WorkspaceSearchIndex).UpdateSettings(&meilisearch.Settings{
|
||||
SearchableAttributes: []string{"name"},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.CreateIndex(&meilisearch.IndexConfig{
|
||||
Uid: OrganizationSearchIndex,
|
||||
PrimaryKey: "id",
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.Index(OrganizationSearchIndex).UpdateSettings(&meilisearch.Settings{
|
||||
SearchableAttributes: []string{"name"},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.CreateIndex(&meilisearch.IndexConfig{
|
||||
Uid: UserSearchIndex,
|
||||
PrimaryKey: "id",
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if _, err := searchClient.Index(UserSearchIndex).UpdateSettings(&meilisearch.Settings{
|
||||
SearchableAttributes: []string{"fullName", "email"},
|
||||
}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
return &SearchManager{
|
||||
config: config.GetConfig().Search,
|
||||
}
|
||||
}
|
||||
|
||||
func (mgr *SearchManager) Query(index string, query string) ([]interface{}, error) {
|
||||
res, err := searchClient.Index(index).Search(query, &meilisearch.SearchRequest{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return res.Hits, nil
|
||||
}
|
||||
|
||||
func (mgr *SearchManager) Index(index string, models []SearchModel) error {
|
||||
_, err := searchClient.Index(index).AddDocuments(models)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mgr *SearchManager) Update(index string, m []SearchModel) error {
|
||||
_, err := searchClient.Index(index).UpdateDocuments(m)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (mgr *SearchManager) Delete(index string, ids []string) error {
|
||||
_, err := searchClient.Index(index).DeleteDocuments(ids)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user