# opensearch **Repository Path**: 3fish/opensearch ## Basic Information - **Project Name**: opensearch - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-07 - **Last Updated**: 2026-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenSERP Clone 一个基于 Node.js 24 + TypeScript + Fastify 的最小可运行 OpenSERP 风格搜索聚合服务。 ## 环境要求 - Node.js 24 - pnpm 10+ 建议先使用 `nvm` 切换版本: ```bash nvm use ``` 项目根目录已提供 `.nvmrc`,默认使用 `24.14.0`。 ## 安装依赖 ```bash pnpm install ``` 首次使用无头浏览器 provider 前,安装 Chromium: ```bash pnpm install:browsers ``` ## 启动开发服务 ```bash pnpm dev ``` 服务默认监听 `http://127.0.0.1:3000`。 ## 环境变量 复制默认配置: ```bash cp .env.example .env ``` 主要配置项: - `PORT`:服务端口 - `DEFAULT_ENGINE`:默认搜索模式,支持 `aggregate`、`bing` 和 `baidu` - `REQUEST_TIMEOUT`:请求超时,单位毫秒 - `REQUEST_DELAY_MIN` / `REQUEST_DELAY_MAX`:请求前随机延迟区间 - `RETRY_COUNT`:失败重试次数 - `MAX_CONCURRENCY`:最大并发数 - `BAIDU_COOKIE`:可选的百度 Cookie;支持直接粘贴浏览器请求头中的 `Cookie:` 整行内容,程序会自动清理前缀、引号和换行 ## API 健康检查: ```bash curl http://127.0.0.1:3000/health ``` 搜索接口: ```bash curl 'http://127.0.0.1:3000/search?q=apple&count=3' curl 'http://127.0.0.1:3000/search?q=apple&engine=aggregate&count=3' curl 'http://127.0.0.1:3000/search?q=apple&engine=bing&count=3' curl 'http://127.0.0.1:3000/search?q=apple&engine=baidu&count=3' ``` 返回结构示例: ```json { "query": "apple", "engine": "aggregate", "results": [ { "title": "Apple", "url": "https://www.apple.com/", "snippet": "...", "source": "bing" } ], "meta": { "count": 1, "tookMs": 842 } } ``` ## 当前能力 - 支持 `GET /health` - 支持 `GET /search` - 已实现 Bing 与百度聚合搜索 - 百度 provider 已切到 Playwright 无头浏览器方案,并支持可选 Cookie 注入 - 内置基础超时、重试、随机 UA、延迟和并发控制 ## Docker 部署 构建镜像: ```bash docker build -t openserp-local . ``` 启动容器: ```bash docker run -d \ --name openserp \ -p 3000:3000 \ --env-file .env \ openserp-local ``` 也可以直接使用 `compose.yaml`: ```bash docker compose up -d --build ``` 容器启动后可访问: ```bash curl 'http://127.0.0.1:3000/search?q=apple&count=6' ``` ## 获取百度 Cookie 推荐直接从浏览器开发者工具里复制: 1. 打开百度并先登录账号,尽量完成一次正常搜索 2. 在浏览器中打开开发者工具 3. 切到 `Network` 面板 4. 刷新页面或重新执行一次百度搜索 5. 在请求列表里点开 `https://www.baidu.com/s?...` 6. 在 `Headers` 中找到请求头里的 `Cookie` 7. 复制 `Cookie` 的值,或整行 `Cookie: ...` 一起复制也可以 8. 粘贴到项目根目录的 `.env`: ```env BAIDU_COOKIE=这里替换成你复制到的 Cookie ``` 说明: - 可以直接粘贴整行 `Cookie: BDUSS=...; BAIDUID=...` - 如果粘贴内容带引号或换行,程序会自动清理 - 使用百度前,先执行一次 `pnpm install:browsers` 安装 Chromium - 更新 `.env` 后,重新执行 `pnpm dev` - 如果仍然返回安全验证页,通常说明 Cookie 已失效,或者当前出口 IP 被风控,需要重新抓取 Cookie 或配合代理使用