偏好推荐修正

This commit is contained in:
2024-11-17 13:59:32 +08:00
parent bec2c9075b
commit a7845dbd4a
8 changed files with 185 additions and 14 deletions

109
api/gorse.go Normal file
View File

@@ -0,0 +1,109 @@
package api
import (
"context"
"fmt"
"strconv"
"strings"
"time"
"github.com/zhenghaoz/gorse/client"
)
var gorse *client.GorseClient
func gorseInit(host string, port int) {
gorse = client.NewGorseClient(fmt.Sprintf("http://%s:%d", host, port), "")
}
// 同步图片数据
func PutImages(page int) error {
var ctx context.Context = context.Background()
for i := 0; i < page; i++ {
var items []client.Item
var data []Image
if err := db.Table("web_images").Select("id", "tags", "create_time").Limit(100).Offset(i * 100).Scan(&data).Error; err != nil {
fmt.Println("获取图像记录失败", err)
return err
}
for _, item := range data {
fmt.Println(item.ID, item.Tags, item.CreateTime)
items = append(items, client.Item{
ItemId: fmt.Sprintf("%d", item.ID),
Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"),
Labels: strings.Split(item.Tags, ", "),
Comment: fmt.Sprintf("%d", item.Content),
})
}
if _, err := gorse.InsertItems(ctx, items); err != nil {
fmt.Println("写入图像记录失败", err)
return err
}
}
fmt.Println("写入图像记录结束..", page*100)
return nil
}
// 同步点赞数据
func PutPraises(page int) error {
var ctx context.Context = context.Background()
for i := 0; i < page; i++ {
var feedbacks []client.Feedback
var data []struct {
ID int
PraiseID int
UserID int
CreateTime time.Time
}
if err := db.Table("web_praises").Select("id", "praise_id", "user_id", "create_time").Where("type = ?", 4).Limit(100).Offset(i * 100).Scan(&data).Error; err != nil {
fmt.Println("获取点赞记录失败", err)
return err
}
for _, item := range data {
fmt.Println(item.ID, item.UserID, item.PraiseID, item.CreateTime)
feedbacks = append(feedbacks, client.Feedback{
FeedbackType: "like",
UserId: fmt.Sprintf("%d", item.UserID),
ItemId: fmt.Sprintf("%d", item.PraiseID),
Timestamp: item.CreateTime.Format("2006-01-02 15:04:05"),
})
}
if _, err := gorse.InsertFeedback(ctx, feedbacks); err != nil {
fmt.Println("写入点赞记录失败", err)
return err
}
}
fmt.Println("写入点赞记录结束..", page*100)
return nil
}
// 同步收藏数据
// 获取推荐ID
func GetRecommend(user_id int, category string) ([]int, error) {
var ctx context.Context = context.Background()
data, err := gorse.GetItemLatestWithCategory(ctx, fmt.Sprintf("%d", user_id), category, 100, 0)
if err != nil {
fmt.Println("获取推荐失败", err)
return nil, err
}
var ids []int
for _, item := range data {
id, _ := strconv.Atoi(item.Id)
ids = append(ids, id)
}
return ids, nil
}

View File

@@ -197,6 +197,12 @@ func NewSchema(config Config) (graphql.Schema, error) {
go checkColorNullRows()
}
// 定时检查点赞收藏记录
if config.Gorse.Open {
fmt.Println("开启用户偏好收集")
gorseInit(config.Gorse.Host, config.Gorse.Port)
}
// 用户的可选字段
user := graphql.NewObject(graphql.ObjectConfig{
Name: "User",

View File

@@ -147,7 +147,7 @@ func (Category) TableName() string {
}
// 输入配置
type ConfigMysql struct {
type MysqlConfig struct {
Host string
Port int
Database string
@@ -159,7 +159,14 @@ type Oss struct {
Local bool
}
type GorseConfig struct {
Host string
Port int
Open bool
}
type Config struct {
Mysql ConfigMysql
Mysql MysqlConfig
Gorse GorseConfig
Oss
}