38 lines
2.5 KiB
Go
38 lines
2.5 KiB
Go
// Package storage provides unified storage interface backed by Redis + MySQL.
|
||
// This file defines the core data types used throughout the storage system.
|
||
package storage
|
||
|
||
// IndexEntry 是倒排索引中的单个条目。
|
||
// 一条索引记录表示"某个 URL 与某个关键词的相关性权重"。
|
||
type IndexEntry struct {
|
||
Weight float32 `json:"w"` // 该 URL 在该关键词下的得分/权重
|
||
URL string `json:"u"` // 网页 URL
|
||
}
|
||
|
||
// SnippetEntry 是 URL 对应的摘要信息缓存。
|
||
// 包含页面标题、描述、正文片段、抓取时间戳和内容哈希(用于增量重爬检测)。
|
||
type SnippetEntry struct {
|
||
Title string `json:"title"` // 网页标题
|
||
Description string `json:"desc"` // meta description 或自动生成的描述
|
||
Text string `json:"text"` // 正文前 N 字符的文本片段
|
||
Timestamp int64 `json:"ts"` // 抓取该页面时的 Unix 时间戳
|
||
ContentHash string `json:"hash"` // 正文内容的 FNV-1a 哈希(用于增量重爬判断内容是否变化)
|
||
}
|
||
|
||
// SiteInfo 存放每个域名/主机的元信息。
|
||
type SiteInfo struct {
|
||
VisitCount int `json:"visit_count"` // 累计访问该网站的次数
|
||
LastVisitTime int64 `json:"last_visit_time"` // 上次访问该网站的时间戳
|
||
Fingerprint any `json:"fingerprint,omitempty"` // 网站指纹(用于识别重复站点)
|
||
SuccessRate *float64 `json:"success_rate,omitempty"` // 访问成功率(成功次数/总访问次数)
|
||
HTMLStructure string `json:"html_structure,omitempty"` // HTML 结构特征摘要
|
||
IPs []string `json:"ips,omitempty"` // 该域名解析出的 IP 列表
|
||
Quality *float64 `json:"quality,omitempty"` // 网站质量评分(0~1)
|
||
HTTPSAvailable *bool `json:"https_available,omitempty"` // 是否支持 HTTPS
|
||
Keywords []string `json:"keywords,omitempty"` // 该网站的高频关键词列表
|
||
OutLinks []string `json:"out_links,omitempty"` // 从该网站页面提取的出站链接列表
|
||
Languages map[string]float64 `json:"languages,omitempty"` // 网站语种分布(语种代码 → 占比)
|
||
Redirects map[string]string `json:"redirects,omitempty"` // 重定向链(URL → 最终 URL)
|
||
ServerTypes []string `json:"server_types,omitempty"` // 网站使用的 HTTP Server 类型列表
|
||
}
|