技能与城市:倒排 SET
职位发布时,把职位 ID 放进对应技能和城市集合。查询时只做集合运算,不扫描职位正文。
SADD skill:Redis:jobs job:101 job:102 SADD skill:Java:jobs job:101 job:105 SADD city:上海:jobs job:101
REDIS 搜索实验 / 第 8 章
别急着给职位打一个神秘的“综合分”。先看集合到底筛出了谁,再看每个职位的必需技能命中了几项——这两步分开,结果才解释得清。
必需技能命中 = 候选人已选择技能 ∩ 职位必需技能。职位写了、候选人没选的技能,只能进入“缺失”,绝不能算命中;加分技能也不会给必需命中数加 1。匹配率 ↓ → 命中数 ↓ → 发布时间新鲜度 ↓
职位发布时,把职位 ID 放进对应技能和城市集合。查询时只做集合运算,不扫描职位正文。
SADD skill:Redis:jobs job:101 job:102 SADD skill:Java:jobs job:101 job:105 SADD city:上海:jobs job:101
只遍历候选人选中的技能。某职位确实把该技能列为“必需”时,才给它的命中分加 1。
ZINCRBY query:q42:required-hit 1 job:101 ZINCRBY query:q42:required-hit 1 job:105 EXPIRE query:q42:required-hit 60
ZSET 负责给 ID 排序,详情仍由 HASH 读取。缺失技能由职位必需集合减去候选人技能集合得到。
HMGET job:101 title city publishedAt SDIFF job:101:required candidate:q42:skills ZREVRANGE query:q42:required-hit 0 -1 WITHSCORES