diff --git a/search/server.go b/search/server.go index 47448aa..49153d2 100644 --- a/search/server.go +++ b/search/server.go @@ -54,6 +54,7 @@ type urlKeywordsEntry struct { Title string // 页面标题(从 Redis Snippet 缓存获取) Snippet string // 摘要(从 Redis Snippet 缓存获取) Keywords []urlKeywordInfo // 关键词列表 + UpdatedAt time.Time // 最后更新时间(用于倒序排列) } // urlKeywordInfo 单个关键词信息 @@ -92,10 +93,11 @@ func (c *urlKeywordsCache) Put(url string, title, snippet string, keywords []url e.Keywords = keywords e.Title = title e.Snippet = snippet + e.UpdatedAt = time.Now() entry = e } else { // 新增到队尾 - entry = &urlKeywordsEntry{URL: url, Title: title, Snippet: snippet, Keywords: keywords} + entry = &urlKeywordsEntry{URL: url, Title: title, Snippet: snippet, Keywords: keywords, UpdatedAt: time.Now()} elem := c.order.PushBack(entry) c.items[url] = elem @@ -254,6 +256,12 @@ func (c *urlKeywordsCache) ListAll() []*urlKeywordsEntry { seen[entry.URL] = true } } + + // 按 UpdatedAt 倒序排序(最新在前) + sort.Slice(memEntries, func(i, j int) bool { + return memEntries[i].UpdatedAt.After(memEntries[j].UpdatedAt) + }) + return memEntries } @@ -290,7 +298,12 @@ func (c *urlKeywordsCache) ListPage(page, pageSize int) []*urlKeywordsEntry { } } - // 分页(从合并数据中按字典序取 page 页) + // 按 UpdatedAt 倒序排序(最新在前) + sort.Slice(memEntries, func(i, j int) bool { + return memEntries[i].UpdatedAt.After(memEntries[j].UpdatedAt) + }) + + // 分页 total := len(memEntries) offset := (page - 1) * pageSize if offset >= total {