求职搜索引擎如何在上百万职位中实现无中间商运作
在外企或大型IT公司求职往往变成一种充满意外惊喜的常规流程。你在聚合平台上看到一个感兴趣的职位,点击链接后发现这个职位一个月前就关闭了。或者你遇到招聘机构发布的同一职位无限复制版本,而这些机构甚至不透露最终雇主是谁。

freehire项目通过直接的技术方案解决这个问题:它直接从招聘跟踪系统(ATS)解析数据,绕过中间环节。数据库包含来自近30万家公司的330多万个活跃职位。整个技术栈采用MIT许可证开源,包括数据采集器、Web界面、搜索引擎和API。
数据来源
大多数科技公司通过Greenhouse、Lever、Workday、Ashby或iCIMS等专业服务平台发布职位。freehire的开发者为92个这样的平台编写了适配器,还连接了大约一百个第三方招聘网站和大型企业的直接数据源。
整个流程运作如下:
- 一个工作进程爬取招聘网站并读取最新职位。添加一家公司通常只需要在YAML文件中添加一行,指定公司名称和ATS中的ID。
- 数据被规范化为统一格式。如果一个职位在多个平台发布,系统会通过稳定键值合并重复项。
- 职位等级、薪资、地点和技术栈的筛选器基于严格的字典构建。这里没有不可靠的启发式方法——系统不会随机猜测数据。
- 一个独立的工作进程从目标ATS下载实际的申请表,保留原始字段结构。
除了职位目录还有什么
搜索只是门面。在职位数据库周围,开发者构建了一个功能完整的求职者工作空间。
简历生成器与匹配度检查
代码库包含一个简历构建器,可以生成针对自动化ATS解析优化的PDF文件。系统将职位要求与你的经历进行匹配,并计算确定性的兼容度评分。当连接到语言模型时,它会针对特定申请提供精准的简历调整建议,而不会编造经历。
带收件功能的回复追踪器
提交申请后,追踪会在看板板上继续进行,并附带状态更新。集成的邮件网关将招聘人员的回复连接到具体的申请卡片上,使通信保持有序,而不会丢失在普通收件箱中。
助手和浏览器扩展
已开发了一个Chrome侧边栏扩展。当你打开任何网站上的职位页面时,插件会读取页面文本,与你的个人资料进行交叉引用,并为你填写申请表。对于喜欢通过Claude Desktop等LLM客户端工作的用户,作者提供了一个独立的MCP服务器。
架构与技术栈
代码库使用Fiber v2 Web框架用Go编写。架构上,后端清晰分离:API服务器专门处理客户端请求,所有后台工作都移至独立的单次执行工作进程。这些工作进程通过cron或在队列中运行都很方便。
cmd/ Точки входа: HTTP-сервер и консольные воркеры
sources/ Файлы конфигурации источников вакансий (YAML)
migrations/ Схема PostgreSQL для sqlc и initdb
web/ Интерфейс на SvelteKit 2
internal/ Внутренние пакеты предметной области
sources/ Адаптеры под конкретные ATS (Workday, Lever, etc.)
pipeline/ Пайплайн сбора, валидации и дедупликации
cv/ cvedit/ Генерация структурированных резюме в PDF
inbox/ Обработка и связывание почты рекрутеров
存储和快速搜索采用组件组合方式:
- PostgreSQL配合pgvector扩展存储主实体和用于语义搜索的向量嵌入。
- sqlc从纯SQL查询生成类型安全的数据库操作代码——不使用ORM。
- Meilisearch处理全文搜索和即时分面过滤。
- SvelteKit 2(基于Svelte 5 runes)和Tailwind 4构成快速SSR前端。
- Redis和MinIO负责缓存、请求速率限制和文件对象存储。
快速启动与API使用
可以通过Docker一键启动本地服务实例及所有依赖项:
make up
该命令将在8080端口启动数据库、搜索引擎、API和Web界面。你可以通过简单的curl请求检查可用性:
curl localhost:8080/health
curl localhost:8080/api/v1/jobs
顺便说一下,项目的公共API无需密钥或授权即可访问。如果你的机器人或个人项目需要获取最新职位,只需访问端点https://freehire.me/api/v1/jobs。所有响应都以可预测的JSON格式返回,包含结构化元数据和分页信息。
运行数据采集器需要使用CLI中的控制台命令:
# Обход конкретного каталога ATS
go run ./cmd/ingest sources/greenhouse.yml
# Сброс очереди индексации в Meilisearch
go run ./cmd/search-drain
# Извлечение вакансий из Telegram-каналов
go run ./cmd/tg-extract
这个项目适合谁
代码库在三种情况下会很有用:
- 你在国际公司找工作,并对低质量的聚合平台感到厌倦。Web版本提供雇主ATS系统的直接链接,没有侵入性的中间商。
- 你想构建自己的聚合平台、职位Telegram频道或机器人。92个ATS系统的开放适配器可以节省数百小时的解析器编写时间。
- 你对一个成熟的Go项目示例感兴趣——没有过度使用的ORM、严格的SQL类型定义、独立工作进程的分离,以及与现代搜索引擎的集成。
项目看起来成熟,其开放性让任何开发者都能通过一行YAML配置提交PR来添加新公司。你可以在项目网站上在线试用,或者在自己的服务器上通过Docker部署。
相关项目