SearXNG 是自托管的元搜索引擎,聚合多个搜索源的结果。默认配置下启用约 350 个引擎,但大部分在当前网络环境下不可用。本文记录一次从 350 个引擎精简到 19 个的过程。
测试环境:ARMv7l,Debian trixie,SearXNG 4.0.0
测试背景
SearXNG 默认启用所有引擎,但实际可用性取决于网络环境和引擎本身的反爬策略。直接使用默认配置会导致:
大量无效请求拖慢响应
界面显示大量不可用引擎
结果被不可用引擎的错误信息干扰
需要根据实际网络环境筛选可用引擎。
可用引擎筛选
网页搜索
| 引擎 | 中文 | 英文 | 结果数 | 状态 |
|---|---|---|---|---|
| bing | 支持 | 支持 | 11 | 稳定 |
| 360search | 支持 | 支持 | 4 | 可用 |
| sogou | 支持 | 支持 | 9 | 可用 |
| baidu | 不支持 | - | 0 | 验证码拦截 |
| duckduckgo | 不支持 | 不支持 | 0 | 超时 |
| 不支持 | 不支持 | 0 | 不可达 | |
| brave | 不支持 | 不支持 | 0 | 超时 |
Bing 是最稳定的选择,中英文都支持,无验证码。需要注意配置cn.bing.com而非国际版。
360search 中文搜索效果好,无验证码,英文结果较少。
搜狗中文搜索好,有微信公众号内容,但图片/视频/微信垂直搜索无结果。
百度反爬严格,自动请求触发验证码,不建议使用。
学术搜索
| 引擎 | 结果数 | 状态 |
|---|---|---|
| arxiv | 11 | 稳定 |
| crossref | 25 | 稳定 |
| europepmc | 1 | 可用 |
| core.ac.uk | 0 | 无结果 |
arXiv 覆盖物理、数学、计算机等领域预印本。Crossref 做 DOI 引用查询。EuropePMC 专注生物医学。
技术搜索
| 引擎 | 用途 |
|---|---|
| stackoverflow | 编程问题 |
| askubuntu | Ubuntu 相关问题 |
| superuser | 系统管理 |
| pypi | Python 包 |
| crates.io | Rust 包 |
| github trending | GitHub 趋势 |
文档搜索
| 引擎 | 用途 |
|---|---|
| arch linux wiki | Arch Linux 文档 |
| nixos wiki | NixOS 文档 |
| azure | 微软云文档 |
不可用引擎分类
| 类别 | 代表引擎 | 原因 |
|---|---|---|
| 网络不可达 | Google、DuckDuckGo、Brave、Wikipedia、Yandex | 超时或被墙 |
| 反爬拦截 | Baidu | 验证码 |
| 需要 API key | 500px、Flickr、DeviantArt、Pexels | 未注册 |
| 无结果 | core.ac.uk、astrophysics data system、pixabay | 引擎失效或查询不匹配 |
优化前后对比
| 项目 | 优化前 | 优化后 |
|---|---|---|
| 引擎数量 | 350 | 19 |
| 减少比例 | - | 95% |
| 搜索速度 | 慢 | 快 |
| 界面 | 混乱 | 简洁 |
减少无效请求后,响应速度提升明显。
配置方法
settings.yml 关键配置
yaml
ui: default_locale: 'zh-Hans-CN' search: autocomplete: 'bing' default_lang: 'zh-CN'
指定引擎搜索
bash
# 中文搜索 curl 'http://127.0.0.1:8080/search?q=人工智能&engines=bing&language=zh-CN' # 英文搜索 curl 'http://127.0.0.1:8080/search?q=machine+learning&engines=bing&language=en' # 学术搜索 curl 'http://127.0.0.1:8080/search?q=transformer&engines=arxiv&language=en' # 技术搜索 curl 'http://127.0.0.1:8080/search?q=python+async&engines=stackoverflow&language=en'
不指定engines参数时,使用所有启用的引擎。
SearXNG 工作机制
SearXNG 本身不爬取网页,它把查询转发给各个上游搜索引擎,解析返回的 HTML 或 JSON,统一格式后返回给用户。
请求流程:
用户发起查询
SearXNG 并行请求所有启用的引擎
每个引擎返回结果,SearXNG 解析
合并去重,按相关性排序
返回统一格式的结果页
因此引擎的可用性取决于上游网站是否可达、是否有反爬、是否需要认证。
引擎配置项
SearXNG 的引擎配置在settings.yml的engines:段。
yaml
engines: - name: bing engine: bing shortcut: bi categories: [general, web] disabled: false
常用字段:
| 字段 | 说明 |
|---|---|
| name | 引擎显示名 |
| engine | 引擎类型(对应代码中的实现) |
| shortcut | 快捷前缀,如!bi |
| categories | 分类,general/images/videos/news/science 等 |
| disabled | 是否禁用 |
| timeout | 超时秒数 |
| weight | 结果权重 |
| language | 支持的语言 |
分类说明
SearXNG 按类别组织引擎:
| 分类 | 说明 | 代表引擎 |
|---|---|---|
| general | 通用网页搜索 | bing、google |
| images | 图片搜索 | flickr、pixabay |
| videos | 视频搜索 | youtube |
| news | 新闻搜索 | google news |
| science | 学术搜索 | arxiv、crossref |
| it | 技术搜索 | stackoverflow |
| files | 文件搜索 | - |
| social media | 社交搜索 | - |
查询时可以指定分类:!images 猫。
结果权重与排序
SearXNG 合并多个引擎的结果后,按以下因素排序:
引擎权重(
weight字段)结果在原始引擎中的排名
标题和摘要与查询的匹配度
多个引擎同时返回同一结果时加权
可以通过调整weight影响排序。
超时与重试
每个引擎有独立的超时设置。默认超时较短,慢速引擎容易被截断。
yaml
engines: - name: bing engine: bing timeout: 3.0
超时过短会导致结果不全,过长会拖慢整体响应。需要根据网络情况调整。
常见问题
引擎显示可用但无结果
可能是引擎的 HTML 结构变了,SearXNG 的解析器跟不上。需要更新 SearXNG 或修改解析逻辑。
某个引擎突然全部超时
上游可能改了反爬策略,或暂时不可达。建议先禁用该引擎,观察一段时间。
需要 API key 的引擎
部分引擎(如图片搜索)需要注册 API key。在settings.yml中配置对应字段:
yaml
engines: - name: flickr engine: flickr api_key: 'your_key_here'
如何测试引擎可用性
bash
# 测试单个引擎 curl 'http://127.0.0.1:8080/search?q=test&engines=bing&format=json' # 查看所有引擎状态 curl 'http://127.0.0.1:8080/config'
优化建议
根据网络环境筛选引擎,不可达的直接禁用
中英文搜索分开配置,避免中文引擎挤压英文结果
学术、技术、文档类引擎按需启用
定期检查引擎可用性,及时禁用失效引擎
调整超时和权重,平衡响应速度和结果完整性
精简后的引擎清单
| 分类 | 引擎 |
|---|---|
| 网页搜索 | bing、360search、sogou、mojeek、startpage、swisscows |
| 学术搜索 | arxiv、crossref、europepmc |
| 技术搜索 | stackoverflow、askubuntu、superuser、pypi、crates.io、github trending |
| 文档搜索 | arch linux wiki、nixos wiki、azure |
| AI 搜索 | cloudflareai |
共 19 个。
SearXNG 的核心问题是默认配置过于激进,启用了大量在当前网络下不可用的引擎。按实际情况筛选后,可用性和响应速度都有明显改善。