REDIS 搜索实验 / 第 8 章

职位技能匹配台

别急着给职位打一个神秘的“综合分”。先看集合到底筛出了谁,再看每个职位的必需技能命中了几项——这两步分开,结果才解释得清。

SET × ZSET
0项候选人技能
0个 SET 并集候选职位
0个最终展示职位

第一步:SET 找候选集

每项技能就是一张倒排表
防错公式:必需技能命中 = 候选人已选择技能 ∩ 职位必需技能。职位写了、候选人没选的技能,只能进入“缺失”,绝不能算命中;加分技能也不会给必需命中数加 1。
排序 / REQUIRED HIT ZSET

第二步:ZSET 记录必需技能命中数

匹配率 ↓ → 命中数 ↓ → 发布时间新鲜度 ↓

底层键 / REDIS KEY SHAPES

把“搜索”和“排序”拆成三类键

技能与城市:倒排 SET

职位发布时,把职位 ID 放进对应技能和城市集合。查询时只做集合运算,不扫描职位正文。

SADD skill:Redis:jobs job:101 job:102
SADD skill:Java:jobs  job:101 job:105
SADD city:上海:jobs   job:101

本次查询:临时 ZSET

只遍历候选人选中的技能。某职位确实把该技能列为“必需”时,才给它的命中分加 1。

ZINCRBY query:q42:required-hit 1 job:101
ZINCRBY query:q42:required-hit 1 job:105
EXPIRE   query:q42:required-hit 60

职位详情:HASH

ZSET 负责给 ID 排序,详情仍由 HASH 读取。缺失技能由职位必需集合减去候选人技能集合得到。

HMGET job:101 title city publishedAt
SDIFF job:101:required candidate:q42:skills
ZREVRANGE query:q42:required-hit 0 -1 WITHSCORES