网易首页 > 网易号 > 正文 申请入驻

归一化占 80% 脏活:我如何把 420 万条食品数据变成 40ms 快速搜索 API

0
分享至

为什么所有营养应用开发者都会撞上同一堵墙?Open Food Facts 明明是一座金矿——几百万真实的条形码产品数据,免费开放——可一打开就傻眼:重复条目满天飞,单位乱到让人崩溃,一半的字段空着,甚至能看到一块饼干每 100 克标注 6000 千卡的离谱数值。

我花了几个月时间一头扎进清洗工作,踩遍了坑,最终把这堆野生的众包数据驯服成了 DietlyAPI:背后 420 万种食品,一次典型搜索 40 毫秒左右返回结果。这篇文章就说清楚清洗究竟干了什么,因为大部分脏活在一开始完全超出我的预料。

8 成的时间在归一化
Open Food Facts 里每个数据源对“一份”都有自己的定义。同一个产品,有的报每 100 克营养,有的报每份,有的按整包给数值;能量值可能是千焦也可能是千卡,重量单位一会儿是克,一会儿又是毫克,有时单位直接混在文本串里。我的做法是统一转换:全部落到以“克”为基本单位的“每份”规范行上,同时保留原始分量描述,前端该怎么展示怎么展示。

更阴险的问题是:单独看每个值好像都说得过去,可加在一起就彻底不合理。蛋白质、碳水、脂肪的总重量超过了一份的净重;用 4/4/9 法则倒推,卡路里跟宏量营养素分解根本对不上。于是每一行数据都要过一道合理性检查,没通过的就尝试从其他字段修复——比如从千焦反推千卡,或者从每百克值换算到每份——实在修不了的,直接丢弃。

去重之后,按置信度排序
同一种酸奶在 Open Food Facts 里可能出现五次,每次条形码差一位,完整度也高低不等。我没有在导入时强行选一个“胜者”,而是给每个条目算一个置信度分数:数据完整度、来源可信度、有没有图片、合理性检查结果,全打进去。搜索时按分数从高到低排,那些乱糟糟的重复项还在,只是永远不会排到前面。

这一个设计后来成了最大的体验升级。搜“香蕉”,排第一的是一根真正香蕉的照片和营养数据,而不是某个批发商上传的“香蕉味浓缩糖浆”。让真实、高品质的数据自然上浮,远比反复删除垃圾条目更可持续。

一顿饭的成本跑起整个服务
整套系统跑在一台 4GB 内存的 Hetzner 云主机上:FastAPI + Postgres,借力三元组索引和全文索引,前面套上 Cloudflare 加速,再预渲染 85 万个静态页面供浏览。每周通过 systemd 定时任务做一次增量重建,完全没有复杂的基础设施。我还做了一个公开状态页,实时显示探测到的延迟,这样“快”不是口号,是能查到的数字。

直接用,零门槛
免费层不需要绑卡,即领一个 API 密钥,每分钟 30 次请求,对多数 demo 和小项目足够:

curl "https://api.getdietly.com/search?q=greek+yogurt&limit=3"

产品信息、OpenAPI 规范全公开在 getdietly.com 上。底层数据来自 Open Food Facts,采用 ODbL 许可,如果你对外展示,记得标明来源——本来也应该标,没有这群贡献者就没有这一切。有什么关于数据清洗管线的问题,欢迎在评论区直接问。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
曝顶流小花新恋情!恋上大13岁男导演,街头对男友撒娇、耍小性子

曝顶流小花新恋情!恋上大13岁男导演,街头对男友撒娇、耍小性子

涵豆说娱
2026-07-15 17:28:24
邹市明一家国外度假!冉莹颖膘肥体壮不好惹,轩轩一头白毛好土气

邹市明一家国外度假!冉莹颖膘肥体壮不好惹,轩轩一头白毛好土气

小徐讲八卦
2026-03-01 05:51:11
提高代谢降低体脂,10个生活化减脂的方法,让体脂率轻松掉

提高代谢降低体脂,10个生活化减脂的方法,让体脂率轻松掉

运动健身号
2026-07-17 09:30:23
反转来了!内贾德重出江湖,伊朗终于宣战!万斯怒怼以色列搞破坏

反转来了!内贾德重出江湖,伊朗终于宣战!万斯怒怼以色列搞破坏

触摸史迹
2026-07-18 01:37:35
倒查22年!刘永杰、贾振丽、李世军论文,因抄袭被撤稿

倒查22年!刘永杰、贾振丽、李世军论文,因抄袭被撤稿

双一流高校
2026-07-18 03:22:42
夺冠幕后功臣!华子自曝支招唐斯对付文班:我给了他一套通关秘籍

夺冠幕后功臣!华子自曝支招唐斯对付文班:我给了他一套通关秘籍

罗说NBA
2026-07-18 05:16:01
德拉富恩特:我们和阿根廷都没赢佛得角,说明他们没有那么差

德拉富恩特:我们和阿根廷都没赢佛得角,说明他们没有那么差

懂球帝
2026-07-18 03:05:14
日本改口称中国超级大国!数十年立场一夜改变!日本人开智了?

日本改口称中国超级大国!数十年立场一夜改变!日本人开智了?

爱意随风起呀
2026-07-18 05:43:08
中了特朗普的套?美军堂而皇之进驻台湾,一步步磨光解放军底线

中了特朗普的套?美军堂而皇之进驻台湾,一步步磨光解放军底线

马贪在解说
2026-07-16 17:14:40
雷军一张“车内户型图”,把卖车卖房的都整沉默了

雷军一张“车内户型图”,把卖车卖房的都整沉默了

买车家
2026-07-15 10:56:55
皇马1.5亿巨星加盟罗马诺确认,52场48球

皇马1.5亿巨星加盟罗马诺确认,52场48球

五姑娘台球
2026-07-17 13:14:10
乌克兰零零后新星 Vixi Rafi:眼神能拉丝,VR必看!

乌克兰零零后新星 Vixi Rafi:眼神能拉丝,VR必看!

吃瓜党二号头目
2026-07-17 10:43:11
《功夫女足》藏周星驰龙套天团!除了刘嘉玲牌友,还有丧彪前男友

《功夫女足》藏周星驰龙套天团!除了刘嘉玲牌友,还有丧彪前男友

头号电影院
2026-07-16 19:11:49
你见过闲鱼的哪些奇葩交易?网友:把男儿膝下的黄金提现了

你见过闲鱼的哪些奇葩交易?网友:把男儿膝下的黄金提现了

另子维爱读史
2026-06-09 22:22:40
唯一候选人伯纳姆担任英国工党党首,将直接获任英国首相,来自普通家庭,深耕地方多年;8年前曾来华访问,对此念念不忘

唯一候选人伯纳姆担任英国工党党首,将直接获任英国首相,来自普通家庭,深耕地方多年;8年前曾来华访问,对此念念不忘

极目新闻
2026-07-17 19:27:05
3胜1负!火箭闯入夏联4强,半决赛挑战灰熊,桑顿略胜小布泽尔

3胜1负!火箭闯入夏联4强,半决赛挑战灰熊,桑顿略胜小布泽尔

熊哥爱篮球
2026-07-18 02:30:26
男子租房18年 退租时被要求“恢复如新” 做不到要赔近25万元 法院判决:租客赔6万余元

男子租房18年 退租时被要求“恢复如新” 做不到要赔近25万元 法院判决:租客赔6万余元

闪电新闻
2026-07-17 10:35:25
全国5800万人断缴社保:是“任性”还是无数人希望的破灭?

全国5800万人断缴社保:是“任性”还是无数人希望的破灭?

微评社
2026-07-16 14:55:07
终于等到你!范弗里特复出进展:2个月后正式复出?斯通信心十足

终于等到你!范弗里特复出进展:2个月后正式复出?斯通信心十足

熊哥爱篮球
2026-07-18 02:53:35
后院起火!乌军连炸147艘俄油轮逼俄军调兵回防,搅乱全盘布局

后院起火!乌军连炸147艘俄油轮逼俄军调兵回防,搅乱全盘布局

军迷战情室
2026-07-16 23:33:30
2026-07-18 07:27:00
像素与芯片
像素与芯片
有态度网友ytd
299文章数 50关注度
往期回顾 全部

科技要闻

WAIC2026看什么?这份"不迷路"攻略请收好

头条要闻

重庆山体崩塌致8死34人失联 前后对比图披露

头条要闻

重庆山体崩塌致8死34人失联 前后对比图披露

体育要闻

30亿欧对决,世界杯季军战毫无意义?

娱乐要闻

曲婉婷自爆患癌!全网喊“苍天绕过谁”

财经要闻

梁文锋不需要天才

汽车要闻

把中国超跑卖到英国,比亚迪正在被世界看见

态度原创

亲子
游戏
家居
健康
手机

亲子要闻

原来我们小时候玩的丢沙包、跳皮筋换个名字叫手眼协调、平衡训练,一节课158?

悬赏上万美元破解PS5!硬刚索尼封闭生态

家居要闻

2026建博会(广州) 公装联探展交流活动

刮痧也会刮出脑梗?讲个真实案例

手机要闻

小米18 Pro系列入网!全球首发2nm骁龙8E6 Pro:9月见

无障碍浏览 进入关怀版