支持相似图像查询
This commit is contained in:
@@ -181,7 +181,8 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
||||
},
|
||||
}),
|
||||
Args: graphql.FieldConfigArgument{
|
||||
"id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定ID的"},
|
||||
"similar": &graphql.ArgumentConfig{Type: graphql.Int, Description: "获取与指定ID图像相似的图像"},
|
||||
"id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "获取指定ID的图像"},
|
||||
"width": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定宽度的"},
|
||||
"height": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中指定高度的"},
|
||||
"content": &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选图像中含有指定内容的"},
|
||||
@@ -205,15 +206,16 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
||||
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
||||
// 定义参数结构体
|
||||
var args struct {
|
||||
First int
|
||||
Last int
|
||||
After string
|
||||
Before string
|
||||
Text string
|
||||
First int
|
||||
Last int
|
||||
After string
|
||||
Before string
|
||||
Text string
|
||||
Similar int
|
||||
}
|
||||
mapstructure.Decode(p.Args, &args)
|
||||
|
||||
// 返回字段
|
||||
// 处理要求返回的字段
|
||||
var fields []string
|
||||
requestedFields := p.Info.FieldASTs[0].SelectionSet.Selections
|
||||
for _, field := range requestedFields {
|
||||
@@ -271,8 +273,20 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// 特殊处理 text 参数
|
||||
var id_list []string
|
||||
// 特殊处理 similar 参数
|
||||
if args.Similar != 0 {
|
||||
fmt.Println("similar:", args.Similar)
|
||||
id_list := models.GetSimilarImagesIdList(args.Similar, 200)
|
||||
fmt.Println("ids:", id_list)
|
||||
ids_str := strings.Trim(strings.Join(strings.Fields(fmt.Sprint(id_list)), ","), "[]")
|
||||
if ids_str == "" {
|
||||
return map[string]interface{}{"list": []Image{}, "total": 0}, nil
|
||||
}
|
||||
where = append(where, fmt.Sprintf("id IN (%s) LIMIT %d", ids_str, len(id_list)))
|
||||
}
|
||||
|
||||
// 特殊处理 text 参数
|
||||
if args.Text != "" {
|
||||
resp, err := models.ZincSearch(map[string]interface{}{
|
||||
"query": map[string]interface{}{
|
||||
|
Reference in New Issue
Block a user