本文深入介绍 SearXNG 这个免费开源的元搜索引擎,展示如何部署完全控制、不被跟踪、保护隐私的搜索实例,并详细讲解其架构设计、核心组件、自定义扩展方式以及 Docker 部署方案。
前言
你是否希望拥有一个完全控制、不被跟踪、保护隐私的元搜索引擎?一个可以搜索 Google、DuckDuckGo、Wikipedia 等多个搜索引擎,并聚合结果的强大工具?
SearXNG 正是这个问题的完美答案——它是一个免费、开源的元搜索引擎,让任何人都可以部署自己的搜索实例,享受真正的搜索自由。
本文将深入介绍 SearXNG 的架构设计、核心组件、自定义扩展方式以及 Docker 部署方案。
什么是 SearXNG?
核心理念
SearXNG 是一个免费、开源的互联网元搜索引擎,用于从各种搜索服务和数据库中聚合结果。
核心特性:
- 🔒 隐私优先:不跟踪用户,不建立用户画像
- 🌐 聚合多个搜索引擎:Google、DuckDuckGo、Wikipedia 等
- 🎨 可定制界面:支持主题和布局自定义
- 🔧 可扩展:支持自定义搜索引擎和解析器
- 🐳 Docker 部署:一键部署,易于维护
- 🌍 Tor 支持:可通过 Tor 使用,增强匿名性
项目信息
| 属性 | 信息 |
|---|---|
| GitHub | searxng/searxng |
| 官网 | searxng.org |
| Docker 镜像 | docker.io/searxng/searxng:latest |
| 文档 | docs.searxng.org |
| 许可证 | MIT |
架构设计
整体架构
SearXNG 采用模块化、插件式架构,由多个核心组件构成:
1 | ┌─────────────────────────────────────────────────────┐ |
核心组件
1. Web 界面层
技术栈:
- 框架:Flask
- 语言:Python
- 模板:支持多个主题模板
功能:
- 🎨 美观的搜索界面
- 🔍 搜索历史记录
- ⚙️ 设置页面
- 📊 结果展示和过滤
- 🌐 多语言支持
2. 搜索引擎(Engines)
SearXNG 的核心是可插拔的搜索引擎架构,支持多种类型的引擎:
在线引擎:1
2
3
4
5# 示例:Google 搜索引擎
class GoogleEngine:
def search(self, query, params):
# 实现 Google 搜索逻辑
pass
支持的在线引擎类型(已文档化):
- 🔎 Demo Online Engine
- 📄 XPath Engine
- 📖 MediaWiki Engine
- 📦 JSON Engine
- 🏢 Adobe Stock
- 🐧 Alpine Linux Packages
- 📦 Anna’s Archive
- 🔖 Arch Linux
- 📄 arXiv
- ☁️ Azure Resources
- 🔍 BIng Engines
- 💾 Brave Engines
- 📊 BT4G
- 🇨🇳 ChinaSo
- ⚙️ CORE
- 🌐 Crossref
- ⏱️ Dailymotion
- 💬 Discourse Forums
- 🦆 DuckDuckGo Engines
- 🐧 Geizhals
- 🌐 GitHub Code
- 🤗 GitLab
- 💬 Hugging Face
- 🔍 LLM 火花引擎
- 📚 Library of Congress
- 🔍 Marginalia Search
- 💬 Mastodon
- 🔎 Moviepilot
- 🔋 Mwmbl Engine
- 🛢 Odysee
- 🎯 OpenAlex
- 📖 Open Library
- 📺 PeerTube Engines
- 🧱 Pipéd
- 🔍 Presearch Engine
- 📖 PubMed
- 🔟 Radio Browser
- 📚 Recoll Engine
- 🧭 Repology
- 🔍 Reuters
- 💻 Seekr Engines
- 🔍 Semantic Scholar
- 🔊 SoundCloud
- 📄 SourceHut
- 🔍 Startpage Engines
- 🏷️ Tagesschau API
- 🌐 Torznab WebAPI
- 📺 Tube Archivist
- 📚 Void Linux binary packages
- 🧱 Wallhaven
- 📚 Wikipedia
- 🌐 Yahoo Engine
- 📚 Z-Library
离线引擎:
- 💾 离线概念(离线数据库索引)
- 🔍 命令行引擎
- 📊 SQL 引擎(MySQL、PostgreSQL 等)
- 🌐 本地搜索 API 索引
3. 搜索处理器(Search Processors)
用于处理和转换搜索结果:
示例处理器:
- 🔄 结果去重
- 📊 结果排序和过滤
- 🌐 URL 标准化
- 📝 摘要生成
- 🔗 链接跟踪
- 🏷️ 跨语言翻译
4. 结果类型(Result Types)
基础类型:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32from searx.result_types import EngineResults
class CustomResultList(EngineResults):
def response(self, resp):
res = EngineResults()
# 添加文本回答
res.add(
res.types.Answer(
answer="这是一个基于 Python 的搜索引擎",
url="https://example.org"
)
)
# 添加图像结果
res.add(
res.types.Image(
title="示例图片",
url="https://example.com/image.jpg",
thumbnail_url="https://example.com/thumb.jpg"
)
)
# 添加视频结果
res.add(
res.types.Video(
title="示例视频",
url="https://example.com/video.mp4"
)
)
return res
支持的结果类型:
Answer:文本答案Image:图片结果Video:视频结果Audio:音频结果File:文件结果Discussion:讨论帖Torrent:种子文件Social:社交媒体帖子
5. 答题引擎(Answerers)
用于生成直接答案,无需访问外部搜索引擎:
类型:
- 🔮 本地 LLM(大语言模型)
- 📚 知识库
- 🤖 Wikipedia API
- 🔮 LLM API(Claude、GPT 等)
6. 数据库层
SearXNG 支持多种数据库:
类型:
- 💾 SQLite:轻量级,适合小型部署
- 🐘 PostgreSQL:功能丰富,支持复杂查询
- 🗄️ MySQL:广泛使用,高性能
- 🍃 MongoDB:文档型数据库
- 🔍 ValkeyDB:键值对数据库
- 💾 Valkey:高性能,适合缓存
自定义搜索引擎
创建自定义引擎
1. 在线搜索引擎
1 | # searxng_extra/engines/my_engine.py |
2. 离线搜索引擎
1 | # 离线数据库搜索 |
3. 注册自定义引擎
在 searxng_extra/engines/ 目录中创建引擎文件,SearXNG 会自动加载:
1 | # searxng_extra/engines/my_custom_engine.py |
自定义搜索处理器
1 | # searxng_extra/search_processors/my_processor.py |
Docker 部署
快速部署
方法 1:使用官方 Docker 镜像
1 | # 拉取最新镜像 |
端口映射说明:
- 主机 8080 → 容器 8080:SearXNG 服务端口
- 如果使用反向代理,映射到其他端口(如 8888)
方法 2:使用 Docker Compose
创建 docker-compose.yml:
1 | version: '3.8' |
启动服务:
1 | # 启动服务 |
方法 3:反向代理配置
如果使用 Caddy 作为反向代理:
1 | version: '3.8' |
Caddy 配置(Caddyfile):
1 | example.com { |
环境变量配置
SearXNG 支持以下环境变量:
| 变量 | 说明 | 默认值 |
|---|---|---|
INSTANCE_NAME |
实例名称 | searxng |
BASE_URL |
基础 URL | 自动检测 |
SEARXNG_UWSGI_WORKERS |
uWSGI 工作进程数 | -4 |
SEARXNG_UWSGI_THREADS |
每个进程的线程数 | -4 |
LOG_LEVEL |
日志级别 | INFO |
数据持久化
重要目录:1
2
3
4
5
6
7
8
9
10# searxng_data: 配置文件和数据库
- /etc/searxng/
├── settings.yml
├── engines/
└── searxng.yml
# searxng_logs: 日志文件
- /var/log/searxng/
├── searxng.log
└── searxng-error.log
配置与定制
自定义主题
SearXNG 支持自定义主题模板:
1 | # searxng_extra/templates/my_theme.html |
搜索设置
创建 searxng_extra/engines/settings.yml:
1 | # 启用/禁用引擎 |
高级功能
1. Tor 支持
通过 Tor 匿名访问 SearXNG:
1 | # 使用 Tor 网络访问 |
2. 结果缓存
SearXNG 内置了结果缓存机制:
1 | # 启用缓存(在 settings.yml 中配置) |
3. 搜索历史
为注册用户保存搜索历史:
1 | # settings.yml |
4. 速率限制
防止滥用:
1 | # searxng_extra/middleware/rate_limiter.py |
实际应用场景
场景 1:家庭私有搜索
需求:
- 不被跟踪的搜索体验
- 整合多个搜索引擎
- 在家庭设备上运行
部署:1
2
3
4
5
6
7
8
9services:
searxng:
image: docker.io/searxng/searxng:latest
ports:
- "8080:8080"
volumes:
- ./searxng_config:/etc/searxng
environment:
- INSTANCE_NAME=home-search
场景 2:企业内网搜索
需求:
- 整合内部文档搜索
- 支持 LLM 答题
- 私密性保护
配置:1
2
3
4
5
6
7
8
9
10# 添加企业搜索引擎
enabled_engines:
- internal_wiki
- llm_answerer
# 配置 LLM API
answerer:
provider: openai
api_key: ${OPENAI_API_KEY}
model: gpt-4
场景 3:学术研究搜索
需求:
- 聚合多个学术数据库
- 支持 arXiv、Semantic Scholar 等
- 高质量结果排序
配置:1
2
3
4
5
6# 优先学术引擎
engine_weights:
arxiv: 1.5
semantic_scholar: 1.5
pubmed: 1.3
wikipedia: 0.8
场景 4:开发者测试
需求:
- 测试自定义搜索引擎实现
- 调试搜索处理器
- 验证结果格式
部署:1
2
3
4
5
6# 开发模式
docker-compose -f docker-compose.dev.yml
# 使用本地代码挂载
volumes:
- ./searxng_extra:/etc/searxng/extra
性能优化
1. 数据库优化
SQLite 优化:1
2
3
4
5
6
7-- 创建索引
CREATE INDEX IF NOT EXISTS idx_content ON documents(content);
-- 优化查询
SELECT * FROM documents
WHERE content LIKE ?
LIMIT 20;
PostgreSQL 优化:1
2
3
4
5
6-- 全文搜索索引
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- 创建 GIN 索引
CREATE INDEX idx_content_gin ON documents
USING gin (to_tsvector('content'));
2. 缓存策略
1 | # searxng_extra/cache/redis_cache.py |
3. 并发处理
1 | # uWSGI 配置 |
安全与隐私
隐私保护机制
- 不跟踪用户:默认不记录搜索历史
- 不建立用户画像:不收集用户行为数据
- 可选登录:用户可以选择是否登录
- 匿名模式:支持 Tor 访问
- HTTPS 强制:所有通信使用加密
安全最佳实践
1 | # settings.yml |
监控与维护
日志管理
1 | # 查看实时日志 |
健康检查
1 | # searxng_extra/health_check.py |
故障排查
常见问题
1. 容器无法启动
1 | # 查看容器日志 |
2. 数据库连接失败
1 | # 检查数据库文件权限 |
3. 搜索结果为空
1 | # 启用调试日志 |
与其他方案对比
| 特性 | SearXNG | DuckDuckGo | |
|---|---|---|---|
| 开源 | ✅ | ❌ | ✅ |
| 隐私 | ✅ 不跟踪 | ❌ 跟踪 | ✅ 不跟踪 |
| 多引擎聚合 | ✅ | ❌ | ❌ |
| 自定义 | ✅ 可扩展 | ❌ | ❌ |
| 自托管 | ✅ | ❌ | ❌ |
| Tor 支持 | ✅ | ⚠️ 有限 | ✅ |
| 部署难度 | 中等 | 困难 | 简单 |
| 学习曲线 | 中等 | 低 | 低 |
总结
SearXNG 是一个功能强大、灵活可扩展的私有元搜索引擎解决方案。
核心优势
- 隐私优先:不跟踪、不建立用户画像
- 多引擎聚合:整合 100+ 搜索引擎
- 高度可定制:支持自定义引擎和处理器
- 易于部署:Docker 一键部署
- 灵活架构:模块化设计,易于扩展
- 开箱即用:支持多种数据库和缓存后端
- Tor 支持:增强匿名性
适用场景
- ✅ 家庭私有搜索服务器
- ✅ 企业内网搜索引擎
- ✅ 学术研究搜索平台
- ✅ 开发者测试环境
- ✅ 隐私保护的搜索体验
资源链接
- 官网:searxng.org
- GitHub:searxng/searxng
- 文档:docs.searxng.org
- Docker 镜像:docker.io/searxng/searxng
- 社区实例:searx.space
如果你希望拥有一个完全控制、保护隐私的私有搜索引擎,SearXNG 是理想的选择!开始部署你自己的搜索实例吧! 🔍🎨