Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d7da874

Browse files
committed
调整首页推荐排序算法
1 parent c635c1e commit d7da874

File tree

4 files changed

+73
-12
lines changed

4 files changed

+73
-12
lines changed

cmd/studygolang/background.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func ServeBackGround() {
7474
c.AddFunc("@daily", logic.DefaultUserRich.AwardCooper)
7575

7676
// 首页推荐自动调整
77-
c.AddFunc("@daily", logic.DefaultFeed.AutoUpdateSeq)
77+
c.AddFunc("@every 5m", logic.DefaultFeed.AutoUpdateSeq)
7878

7979
}
8080

logic/feed.go

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,16 @@ func (self FeedLogic) FindTop(ctx context.Context) []*model.Feed {
7979
return self.fillOtherInfo(ctx, feeds, false)
8080
}
8181

82-
// AutoUpdateSeq 每天自动更新一次动态的排序(校准)
82+
// AutoUpdateSeq 自动更新动态的排序(校准)
8383
func (self FeedLogic) AutoUpdateSeq() {
84-
feedDay := config.ConfigFile.MustInt("feed", "day", 7)
84+
curHour := time.Now().Hour()
85+
if curHour < 7 {
86+
return
87+
}
88+
89+
feedDay := config.ConfigFile.MustInt("feed", "day", 3)
90+
cmtWeight := config.ConfigFile.MustInt("feed", "cmt_weight", 80)
91+
viewWeight := config.ConfigFile.MustInt("feed", "view_weight", 80)
8592

8693
var err error
8794
offset, limit := 0, 100
@@ -99,7 +106,11 @@ func (self FeedLogic) AutoUpdateSeq() {
99106
continue
100107
}
101108

109+
// 当天(不到24小时)发布的,不降
102110
elapse := int(time.Now().Sub(time.Time(feed.CreatedAt)).Hours())
111+
if elapse < 24 {
112+
continue
113+
}
103114

104115
if feed.Uid > 0 {
105116
user := DefaultUser.FindOne(nil, "uid", feed.Uid)
@@ -110,7 +121,7 @@ func (self FeedLogic) AutoUpdateSeq() {
110121

111122
seq := 0
112123
if elapse <= feedDay*24 {
113-
seq = feed.Seq - elapse
124+
seq = self.calcChangeSeq(feed, cmtWeight, viewWeight)
114125
}
115126

116127
MasterDB.Table(new(model.Feed)).Where("id=?", feed.Id).Update(map[string]interface{}{
@@ -121,6 +132,54 @@ func (self FeedLogic) AutoUpdateSeq() {
121132
}
122133
}
123134

135+
func (self FeedLogic) calcChangeSeq(feed *model.Feed, cmtWeight int, viewWeight int) int {
136+
seq := 0
137+
138+
// 最近有评论(时间更新)的,降 1/10 个评论数
139+
if int(time.Now().Sub(time.Time(feed.UpdatedAt)).Hours()) < 1 {
140+
seq = feed.Seq - cmtWeight/10
141+
} else {
142+
// 最近有没有其他变动(赞、阅读等)
143+
var updatedAt time.Time
144+
switch feed.Objtype {
145+
case model.TypeTopic:
146+
topicEx := &model.TopicEx{}
147+
MasterDB.Where("tid=?", feed.Objid).Get(topicEx)
148+
updatedAt = topicEx.Mtime
149+
case model.TypeArticle:
150+
article := &model.Article{}
151+
MasterDB.ID(feed.Objid).Get(article)
152+
updatedAt = time.Time(article.Mtime)
153+
case model.TypeResource:
154+
resourceEx := &model.ResourceEx{}
155+
MasterDB.ID(feed.Objid).Get(resourceEx)
156+
updatedAt = resourceEx.Mtime
157+
case model.TypeProject:
158+
project := &model.OpenProject{}
159+
MasterDB.ID(feed.Objid).Get(project)
160+
updatedAt = time.Time(project.Mtime)
161+
case model.TypeBook:
162+
book := &model.Book{}
163+
MasterDB.ID(feed.Objid).Get(book)
164+
updatedAt = time.Time(book.UpdatedAt)
165+
}
166+
167+
dynamicElapse := int(time.Now().Sub(updatedAt).Hours())
168+
169+
if dynamicElapse < 1 {
170+
seq = feed.Seq - viewWeight
171+
} else {
172+
seq = feed.Seq / 2
173+
}
174+
}
175+
176+
if seq < 20 {
177+
seq = 20
178+
}
179+
180+
return seq
181+
}
182+
124183
func (FeedLogic) fillOtherInfo(ctx context.Context, feeds []*model.Feed, filterTop bool) []*model.Feed {
125184
newFeeds := make([]*model.Feed, 0, len(feeds))
126185

@@ -196,7 +255,7 @@ func (self FeedLogic) updateSeq(objid, objtype, cmtnum, likenum, viewnum int) {
196255
return
197256
}
198257

199-
feedDay := config.ConfigFile.MustInt("feed", "day", 7)
258+
feedDay := config.ConfigFile.MustInt("feed", "day", 3)
200259
elapse := int(time.Now().Sub(time.Time(feed.CreatedAt)).Hours())
201260

202261
if feed.Uid > 0 {

model/feed.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,10 @@ func PublishFeed(object interface{}, objectExt interface{}, me *Me) {
150150
}
151151
}
152152

153-
feedDay := config.ConfigFile.MustInt("feed", "day", 7)
153+
feedDay := config.ConfigFile.MustInt("feed", "day", 3)
154154
feed.Seq = feedDay * 24
155155
if me != nil && me.IsAdmin {
156-
feed.Seq += 100000
156+
feed.Seq += 1000
157157
}
158158

159159
_, err := db.MasterDB.Insert(feed)

model/resource.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
package model
88

9+
import "time"
10+
911
const (
1012
LinkForm = "只是链接"
1113
ContentForm = "包括内容"
@@ -41,11 +43,11 @@ func (this *Resource) BeforeInsert() {
4143

4244
// 资源扩展(计数)信息
4345
type ResourceEx struct {
44-
Id int `json:"-" xorm:"pk"`
45-
Viewnum int `json:"viewnum"`
46-
Cmtnum int `json:"cmtnum"`
47-
Likenum int `json:"likenum"`
48-
Mtime string `json:"mtime" xorm:"<-"`
46+
Id int `json:"-" xorm:"pk"`
47+
Viewnum int `json:"viewnum"`
48+
Cmtnum int `json:"cmtnum"`
49+
Likenum int `json:"likenum"`
50+
Mtime time.Time `json:"mtime" xorm:"<-"`
4951
}
5052

5153
type ResourceInfo struct {

0 commit comments

Comments
 (0)