xiaowei-system/skills/devops/devops-umbrella/references/gaokao-site/recommendation-debugging.md

2.6 KiB
Raw Blame History

推荐引擎调试指南

学校不显示在推荐结果中的排查流程

按顺序排查,不要跳过步骤。

1. 检查数据库层面

sqlite3 gaokao_henan.db "SELECT year, subject, batch, plan_type, min_score, min_rank FROM schools WHERE school_name LIKE '%学校名%' ORDER BY year DESC;"
sqlite3 gaokao_henan.db "SELECT year, subject, batch, major, min_score FROM majors WHERE school_name LIKE '%学校名%' ORDER BY year DESC;"
sqlite3 gaokao_henan.db "SELECT COUNT(DISTINCT school_name) FROM schools WHERE year=2025 AND subject='物理类' AND batch='专科批';"

2. 检查 rows_dict 去重

_calc_prob_data() 中的 rows_dict 过去用 school_name 作为 key。同一学校有多个计划类型普通类/较高收费专业/中外合作办学)时,只有最后一个 ORDER BY min_score DESC 的分数字段存活。

症状:学校出现在数据库中,但推荐结果只出现高分计划类型,低分计划类型被吞。

修复:用 (school_name, plan_type) 双 key 代替单 key。

# 坏的:只保留最后一个计划类型
rows_dict[r[0]] = r
# 好的:每个计划类型独立保留
rows_dict[(r[0], r[5])] = r

同样的改动需要同步在 2025 数据循环和 2024 回退循环中。

3. 检查分数区间匹配

gap = school_min_score - student_score
chong_range:  +3 ~ +10     (专科批)
wen_range:    -2 ~ +3
bao_shallow:  -15 ~ -2
bao_deep:     < -15  AND rank_diff >= 30000

4. 检查位次条件bao_deep 的常见阻塞点)

2024 回退数据 vs 2025 学生位次:不同年份的位次不可直接比较。学校位次高于学生位次时 sch_rank - student_rank < 0,永远不满足 >= 30000

5. 检查 allowed_schools 过滤

只查询 majors WHERE year=2025 中的学校。2024 回退的学校通过 school_basic.json 的 province 字段或学校名关键词补充。

6. 检查 top() 限流

专科批 n_deep = 6只保留前 6 所学校。即使学校进入了 bao_deep 列表,也可能被排序规则挤到 6 名之后。

7. with_entry_points 合并

同一学校有多个计划类型时,只保留最接近考生分数的一个。

8. 私立学校替换逻辑

确保 bao_deep 至少有 2 所民办/独立学院,可能替换掉公办学校。

典型问题模式

现象 常见根因 修复
低分看不到学校 前端 min=200 拦截 改到 160
分数够但看不到 rows_dict 按 school_name 去重 改成双 key
所有分数都看不到 学校只有 2024 数据 检查 2024 回退逻辑
只能看到高收费专业 分数只够 low-score 计划类型 数据现实