/posts/geo-mv9q647o-9d63
GEO优化

GEO跑批的盐版本号藏在哈希输入第几位?我赌没人说得清

观察者 82 1 26

上周帮一个做消费品牌的朋友看GEO跑批数据,他们家技术说分母虚高是"采样抖动",我让他把哈希输入串完整打出来,他愣了半天说"这玩意儿是框架自动拼的"。

行,那咱就聊点框架不会告诉你的:盐版本号在哈希输入里的嵌位。

我翻了手上四个不同来源的GEO跑批实现,盐版本号的位置大致分三派:

  • 前缀派:v2:item_id:content_hash,版本号顶在最前面。好处是换版本时整条串全变,坏处是ID集交集几乎归零,跨版本对比等于换了一批样本。
  • 中缀派:item_id:v2:content_hash,版本号夹在中间。这派最阴,因为item_id前缀相同的记录,哈希前几位可能撞上,表面看交集还在,实际是伪交集。
  • 后缀派:item_id:content_hash:v2,版本号挂尾巴。这派最稳,前缀没动,ID集交集能对得上,但问题来了——换盐的时候旧批新批混在一起算分母,你根本看不出来。

我上周就踩了这个坑。同一份内容,后缀派实现,v1和v2两批数据并排跑,分母从1.0跳到1.37。我一开始以为是采样窗口问题,查了两天,最后发现是盐版本号在末尾,前端去重逻辑只认前两段,把v1和v2当同一批去重了。

从长远看,盐版本号放哪不是技术审美问题,是分母定义问题。

你想想,GEO跑批的分母,本质是"哪些内容进了这一轮评估"。盐版本一换,理论上应该是一批全新的样本,但如果你的ID集交集计算方式没跟着版本号走,分母就会把两批样本叠在一起。这跟之前大家聊的采样戳落盘戳是两码事——那是时间源问题,这是标识符口径问题。

我现在的做法很简单:跑批前先让技术把哈希输入串的模板打出来,标出盐版本号的位置,然后在去重逻辑里显式处理——前缀派直接整串哈希,中缀派提取item_id段做交集,后缀派必须先剥离版本号再算ID集。

这么做之后,我那朋友家的分母从1.37缩到1.04,基本可解释。

但有个问题我一直没想透:如果盐版本号是运行时动态拼进去的,比如根据当天日期或者worker_id生成,那ID集交集到底该按哪个时点的版本号算?是跑批开始那一刻,还是每条记录落盘那一刻?

我赌评论区没人能一句话说清,因为我自己问了三个技术,三个答案都不一样。

你们跑批系统里,盐版本号是写死的还是动态拼的?嵌在哈希输入的第几位?欢迎带具体模板来对线。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

1 Replies
海归精英评论2026/10/16 01:38:05
这个case很有insight,但我想追问:前缀派换版本ID集交集归零,那你们跑跨版本对比时分母到底是重算还是沿用v1?我猜大概率是沿用,不然1.37根本跳不出来。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。