| 榜单 | keyword 数 | 全链路覆盖率 | 最大流失环节 | vs 0325 |
|---|---|---|---|---|
| 热搜榜 | 421 | 57.0% | 表1→表2(42.0%) | ↑ 9.5pp |
| 文娱榜 | 328 | 50.6% | 表1→表2(49.1%) | ↑ 1.3pp |
| 热搜实时上升热点 | 1,031 | 10.9% | 表1→表2(89.0%) | ↑ 1.5pp |
| 文娱实时上升热点 | 578 | 7.8% | 表1→表2(92.2%) | ↓ 2.5pp |
发现 1:整体覆盖率环比提升——全链路从 15.0% → 18.1%,主要由热搜榜贡献(智谱调用覆盖率从 49.6% 提升到 57.9%)
发现 2:文娱实时上升热点覆盖率下降——从 10.3% 降至 7.8%,keyword 数增加但智谱调用数反而减少(54→45)
发现 3:表2→表3 依然健康——325 个智谱 keyword 中 321 个有关联帖子,覆盖率 98.8%
| 环节 | 数据量 | 去重 keyword/post | vs 0325 |
|---|---|---|---|
| 表1:榜单爬虫 | 7,302 条 | 1,772 keyword | +102 条 / +16 kw |
| 表2:智谱搜索 | 5,018 条 | 849 keyword(含非微博) | +4,507 条 / +576 kw |
| 表2∩表1(微博匹配) | — | 325 keyword | +52 kw |
| 表3:关联帖子 | 51,994 条 | 18,243 post | +47,803 条 |
| 异常 | 详情 | vs 0325 同类问题 |
|---|---|---|
| 热搜榜 02 时 100 条 | 正常应为 50 条,翻倍 | 0325 是 01 时文娱榜翻倍 |
| 文娱榜 00 时 100 条 | 正常应为 50 条,翻倍 | 新出现 |
| 文娱榜 14 时、16 时各 51 条 | 正常应为 50 条,多 1 条 | 新出现 |
0325 的 17 时热搜榜 0 条缺失问题在 0326 未复现(17 时正常 50 条),说明当时可能是一次性故障。但 02 时热搜榜和 00 时文娱榜的翻倍问题值得关注,可能是凌晨时段爬虫存在重复触发。
| 指标 | 0325 | 0326 | 变化 |
|---|---|---|---|
| 表1 去重 keyword | 1,756 | 1,772 | +16 (+0.9%) |
| 表1→表2 覆盖率 | 15.5% | 18.3% | +2.8pp |
| 表2→表3 覆盖率 | 96.3% | 98.8% | +2.5pp |
| 全链路覆盖率 | 15.0% | 18.1% | +3.1pp |
| 热搜榜全链路 | 47.5% | 57.0% | +9.5pp |
| 文娱榜全链路 | 49.3% | 50.6% | +1.3pp |
| 热搜实时上升全链路 | 9.4% | 10.9% | +1.5pp |
| 文娱实时上升全链路 | 10.3% | 7.8% | -2.5pp |
解读:
热搜榜覆盖率提升最显著(+9.5pp),智谱调用从 209 个增加到 244 个,可能是调用优先级调整或接口扩容。
文娱实时上升热点是唯一下降的榜单,keyword 数增加了(525→578)但智谱调用反降(54→45),需排查是否有过滤策略变更。
表2→表3 环节持续健康,基本无流失。
对 1,447 个阶段1流失的 keyword,逐条回查表2 底层数据:
| 情况 | keyword 数 | 占流失总数 | 结论 |
|---|---|---|---|
| 表2 中完全无记录 | 1,439 | 99.4% | 智谱压根没调用 |
| 表2 有记录但 tag 不是智谱微博搜索 | 8 | 0.6% | 其他爬虫碰巧同名 |
结论:99.4% 的流失是因为上游没有对这些 keyword 发起智谱调用,不是解析逻辑问题。
| keyword | 实际 tag | 说明 |
|---|---|---|
| 周杰伦新专辑 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 太阳之子 | FalconQQSongSearch 等 | QQ 歌曲/歌词搜索 |
| 第五人格 | ClairvoyanceXhsSearchAirTask 等 | 小红书 + QQ |
| 樱花开了 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 大侦探 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 隐身的名字 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 伊朗 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 洛克王国世界 | SearchQQCompositeSearch | QQ 音乐搜索 |
| 返回状态 | 记录数 | keyword 数 | 占比 |
|---|---|---|---|
| msg 正常 + result 有值 | 4,987 | 845 | |
| msg 为 NULL + result 有值 | 28 | 10 | |
| msg 为 NULL + result 为 NULL | 3 | 3 |
解析侧基本无问题,已调用的 keyword 中 99.5% 正常返回了 AI 摘要。
| 来源 | keyword 数 | 占比 |
|---|---|---|
| 匹配微博榜单 | 325 | |
| 非微博来源 | 524 |
61.7% 的 keyword 不在微博榜单里——上游调用逻辑不只从微博热搜取 keyword,还会从其他来源触发智谱微博搜索,而这部分调用占了大头。
对覆盖率最高的两个榜单(热搜榜 57.0%、文娱榜 50.6%),从排名、时段、持续时长三个维度分析流失 keyword 的特征画像。
| 排名分段 | 热搜榜 kw | 热搜榜命中率 | 文娱榜 kw | 文娱榜命中率 |
|---|---|---|---|---|
| Top 10 | 103 | 82 | ||
| Top 11-20 | 82 | 71 | ||
| Top 21-30 | 69 | 79 | ||
| Top 31-40 | 86 | 60 | ||
| Top 41+ | 81 | 36 |
文娱榜 Top10 命中率(90.2%)显著高于热搜榜 Top10(76.7%),但排名越低衰减越快——文娱榜 Top31-40 仅 13.3%。两个榜单 Top41+ 均低于 33%,排名尾部覆盖严重不足。
| 时段 | 热搜榜 kw | 热搜榜命中率 | 文娱榜 kw | 文娱榜命中率 |
|---|---|---|---|---|
| 凌晨 (00-05) | 72 | 70 | ||
| 上午 (06-11) | 83 | 56 | ||
| 下午 (12-17) | 140 | 119 | ||
| 晚间 (18-23) | 126 | 83 |
两个榜单均呈现「早高晚低」的时段梯度——凌晨上榜的 keyword 命中率 83-86%,晚间上榜的仅 29-31%。推测智谱调用系统可能采用批次调度,凌晨/上午批次覆盖充分,下午/晚间的新增 keyword 来不及触发调用。
| 持续时长 | 热搜榜 kw | 热搜榜命中率 | 文娱榜 kw | 文娱榜命中率 |
|---|---|---|---|---|
| 仅出现 1 次 | 192 | 83 | ||
| 2-3 次 | 116 | 121 | ||
| 4-6 次 | 63 | 71 | ||
| 7 次+ | 50 | 53 |
持续时长是最强的区分特征——7次+ 的 keyword 命中率接近 100%(热搜 98.0%、文娱 100.0%),仅出现 1 次的 keyword 命中率断崖式下降。文娱榜对短时热点尤其不友好——仅出现 1 次的命中率仅 12.0%。
推断:上游调用系统采用批次处理 + 优先级调度机制,短时、晚出现、排名靠后的 keyword 在配额有限时被牺牲。
media_materials IS NOT NULL 过滤导致有效 keyword 丢失,0326 数据同样受影响,建议尽快上线优化版 SQL。所有数据直接从源表查询,未使用 SQL 产出的 tmp 表。
| 数据 | 表 | 过滤条件 |
|---|---|---|
| 表1 榜单爬虫 | external_data.dwd_data_hunter_noteblock_hot_search_board_inc_hi | dt=2026-03-26, platform_type=WEIBO |
| 表2 智谱搜索 | external_data.ods_crawler_return_topic | dt=2026-03-26, tag=ClairvoyanceWeiBoAiKeywordSearchInfo |
| 表3 关联帖子 | external_data.dwd_data_hunter_wb_post_inc_hi | dt=2026-03-26 |
跨表关联:以 keyword 为关联键,表3 使用 FIND_IN_SET 匹配 keyword_set。查询引擎:Impala。
SELECT CASE WHEN chart_name = '微博热搜榜' THEN '热搜榜' WHEN chart_name = '微博文娱榜' THEN '文娱榜' ELSE chart_name END AS rank_name, COUNT(*) as row_cnt, COUNT(DISTINCT keywords) as keyword_cnt FROM external_data.dwd_data_hunter_noteblock_hot_search_board_inc_hi WHERE dt = '2026-03-26' AND platform_type = 'WEIBO' GROUP BY 1 ORDER BY 1;
SELECT COUNT(*) as row_cnt, COUNT(DISTINCT GET_JSON_OBJECT(body, '$.keyword')) as keyword_cnt FROM external_data.ods_crawler_return_topic WHERE dt = '2026-03-26' AND tag = 'ClairvoyanceWeiBoAiKeywordSearchInfo';
SELECT COUNT(DISTINCT t1.keywords) as t1_total_kw, COUNT(DISTINCT t2.keyword) as t1_match_t2 FROM ( SELECT DISTINCT keywords FROM external_data.dwd_data_hunter_noteblock_hot_search_board_inc_hi WHERE dt = '2026-03-26' AND platform_type = 'WEIBO' ) t1 LEFT JOIN ( SELECT DISTINCT GET_JSON_OBJECT(body, '$.keyword') as keyword FROM external_data.ods_crawler_return_topic WHERE dt = '2026-03-26' AND tag = 'ClairvoyanceWeiBoAiKeywordSearchInfo' ) t2 ON t1.keywords = t2.keyword;
SELECT COUNT(*) as t12_kw, SUM(CASE WHEN has_post > 0 THEN 1 ELSE 0 END) as t12_match_t3 FROM ( SELECT t12.keyword, COUNT(DISTINCT t3.post_id) as has_post FROM ( SELECT DISTINCT t2.keyword FROM (...) t1 INNER JOIN (...) t2 ON t1.keywords = t2.keyword ) t12 LEFT JOIN external_data.dwd_data_hunter_wb_post_inc_hi t3 ON t3.dt = '2026-03-26' AND FIND_IN_SET(t12.keyword, t3.keyword_set) > 0 GROUP BY t12.keyword ) sub;
SELECT CASE WHEN t2.keyword IS NOT NULL THEN '表2有记录' ELSE '表2无记录' END as in_t2, COUNT(DISTINCT t1.keywords) as kw_cnt FROM (...) t1 LEFT JOIN (...) t2_match ON t1.keywords = t2_match.keyword LEFT JOIN (...) t2 ON t1.keywords = t2.keyword WHERE t2_match.keyword IS NULL GROUP BY 1;
SELECT CASE WHEN GET_JSON_OBJECT(GET_JSON_OBJECT(body, '$.result'), '$.msg') IS NULL THEN 'msg为NULL' WHEN ... = '' THEN 'msg为空串' WHEN LENGTH(...) < 10 THEN 'msg极短(<10字)' ELSE 'msg正常' END as msg_status, ... FROM external_data.ods_crawler_return_topic WHERE dt = '2026-03-26' AND tag = 'ClairvoyanceWeiBoAiKeywordSearchInfo' GROUP BY 1, 2;
SELECT CASE WHEN t1.keywords IS NOT NULL THEN '匹配微博榜单' ELSE '非微博来源' END as source, COUNT(DISTINCT t2.keyword) as keyword_cnt FROM (...) t2 LEFT JOIN (...) t1 ON t2.keyword = t1.keywords GROUP BY 1;
SELECT CASE WHEN chart_name = '微博热搜榜' THEN '热搜榜' WHEN chart_name = '微博文娱榜' THEN '文娱榜' ELSE chart_name END AS rank_name, hh, COUNT(*) as row_cnt FROM external_data.dwd_data_hunter_noteblock_hot_search_board_inc_hi WHERE dt = '2026-03-26' AND platform_type = 'WEIBO' GROUP BY 1, 2 ORDER BY 1, 2;
SELECT keywords as keyword, GROUP_CONCAT(DISTINCT ..., '|') as rank_names, COUNT(DISTINCT ...) as chart_cnt, MIN(CAST(ranking AS INT)) as min_rank, MAX(search_nums) as max_hot_value, MIN(update_time) as first_time, COUNT(*) as record_cnt FROM external_data.dwd_data_hunter_noteblock_hot_search_board_inc_hi WHERE dt = '2026-03-26' AND platform_type = 'WEIBO' GROUP BY keywords;
SELECT rank_name, CASE WHEN min_rank <= 10 THEN 'Top10' WHEN min_rank <= 20 THEN 'Top11-20' WHEN min_rank <= 30 THEN 'Top21-30' WHEN min_rank <= 40 THEN 'Top31-40' ELSE 'Top41+' END AS rank_segment, COUNT(*) AS total_kw, SUM(CASE WHEN t2_hit = 1 THEN 1 ELSE 0 END) AS hit_kw, ROUND(...) AS hit_rate FROM ( SELECT t1.keywords, ..., MIN(CAST(t1.ranking AS INT)) AS min_rank, MAX(CASE WHEN t2.keyword IS NOT NULL THEN 1 ELSE 0 END) AS t2_hit FROM ... t1 LEFT JOIN ... t2 WHERE t1.chart_name IN ('微博热搜榜', '微博文娱榜') GROUP BY ... ) sub GROUP BY rank_name, rank_segment ORDER BY rank_name, MIN(min_rank);
-- 与 A10 结构类似,将 MIN(ranking) 替换为 MIN(CAST(hh AS INT)) -- 外层 CASE 按时段分组:凌晨(00-05) / 上午(06-11) / 下午(12-17) / 晚间(18-23) SELECT rank_name, time_segment, total_kw, hit_kw, hit_rate FROM (...同 A10 模式...) ORDER BY rank_name, MIN(first_hour);
-- 与 A10 结构类似,将 MIN(ranking) 替换为 COUNT(DISTINCT hh) -- 外层 CASE 按持续时长分组:仅1次 / 2-3次 / 4-6次 / 7次+ SELECT rank_name, duration_segment, total_kw, hit_kw, hit_rate FROM (...同 A10 模式...) ORDER BY rank_name, MIN(appear_cnt);
完整 SQL 代码见 Markdown 版本报告附录 A1-A12