全文检索
站点级词典与热词治理
- 词典按站点隔离,
extension扩展词加载至该站点 Jieba 实例,stop停用词在索引和查询分词阶段过滤;token 禁止空白与控制字符,加载按词隔离,单个坏词只记录告警而不会使整站词典失效。 - 可管理热词使用规范化分组/词条表保存排序和启停状态,真实热度仍来自 Redis ZSET;带时间范围查询时从搜索日志聚合。
- 历史内容在词典变更后通过任务中心执行站点索引重建。
基于 PostgreSQL tsvector + 应用层 jieba 分词,无需引入 Elasticsearch 即可获得中文全文检索能力。
索引流程
- 内容创建/更新时,对标题(权重 A)、SEO 关键词 + 摘要(权重 B)、正文 + searchable 扩展字段(权重 C)做 jieba 细粒度分词(
cutForSearch),写入cms_contents.search_vector(GIN 索引) - 查询时对关键词粗粒度分词 →
plainto_tsquery匹配 →ts_rank_cd相关度排序 + 发布时间倒序 - 无命中且关键词 ≤ 4 字时回退 ILIKE 标题模糊匹配(gin_trgm)
检索管理页
「检索管理」(权限 cms:search:manage)四个 Tab:
- 检索测试:输入关键词查看分词结果与高亮命中,一键重建索引(任务中心异步,分批 200 条 + 断点续跑 + 进度)
- 自定义词典:jieba 用户词典(词 + 权重),新增/修改后运行时热加载;删除词条需重启进程才彻底失效
- 热词统计:前台每次搜索计入 Redis ZSET(
cms:hotwords:{siteId}),支持排行查看与清空 - 死链检测:见 SEO 与流量
前台搜索页
/search?q=keyword:永远动态渲染(不静态化、不缓存),关键词截断 64 字符。
访问统计与搜索分析(P4)
「访问统计」页(/cms/stats,权限 cms:stat:view):
- 访问统计 Tab:今日 PV/UV/独立 IP(较昨日增减)、近 7/30/90 天 PV/UV 趋势、内容访问 TOP20(点击直达编辑页)、外部来源域名 TOP10、设备分布(PC/移动/爬虫)
- 搜索分析 Tab:搜索量趋势、热搜词 TOP20(含平均结果数)、无结果搜索词榜(内容选题风向标)
- 采集机制:服务端响应路径埋点(静态命中/Redis 缓存命中/SSR 三路径全覆盖,预览流量不计入),搜索日志在搜索首屏记录一次;原始日志保留 90 天(周期任务
cms-stat-logs-cleanup清理)