首次提交
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/luxsin/app-api/internal/config"
|
||||
"github.com/meilisearch/meilisearch-go"
|
||||
)
|
||||
|
||||
var modelListAttributes = []string{"rig", "form", "name", "brand_name", "source", "eq_key"}
|
||||
|
||||
type Client struct {
|
||||
index meilisearch.IndexManager
|
||||
}
|
||||
|
||||
func NewClient(cfg config.MeilisearchConfig) *Client {
|
||||
ms := meilisearch.New(cfg.Host, meilisearch.WithAPIKey(cfg.APIKey))
|
||||
return &Client{index: ms.Index(cfg.Index)}
|
||||
}
|
||||
|
||||
func (c *Client) ModelList(ctx context.Context, key string, count int) ([]map[string]any, error) {
|
||||
resp, err := c.index.SearchWithContext(ctx, key, &meilisearch.SearchRequest{
|
||||
Limit: int64(count),
|
||||
AttributesToRetrieve: modelListAttributes,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("meilisearch search: %w", err)
|
||||
}
|
||||
|
||||
if len(resp.Hits) == 0 {
|
||||
return []map[string]any{}, nil
|
||||
}
|
||||
|
||||
list := make([]map[string]any, 0, len(resp.Hits))
|
||||
for _, hit := range resp.Hits {
|
||||
item := make(map[string]any)
|
||||
if err := hit.DecodeInto(&item); err != nil {
|
||||
return nil, fmt.Errorf("decode meilisearch hit: %w", err)
|
||||
}
|
||||
list = append(list, item)
|
||||
}
|
||||
|
||||
return list, nil
|
||||
}
|
||||
Reference in New Issue
Block a user