SearXNG 私有搜索引擎
一句话概述
SearXNG 是一个免费开源的元搜索引擎(metasearch engine),可以聚合来自 251 个搜索服务的结果,不追踪用户、不存储搜索记录,支持自托管部署,是保护隐私的搜索方案,也是很多 AI 搜索项目(如 Perplexica)的搜索后端。
核心知识点表格
| 知识点 | 说明 |
|---|
| 项目地址 | https://github.com/searxng/searxng |
| 官方文档 | https://docs.searxng.org |
| 最新版本 | 2026.5.10+ |
| 搜索引擎数 | 251 个可配置的搜索源 |
| 隐私保护 | 不追踪、不记录、不画像 |
| 许可证 | AGPL-3.0 |
| 开发语言 | Python |
| 输出格式 | HTML、JSON、CSV、RSS |
| 特殊功能 | !bangs 快捷搜索、Tor 支持 |
安装与配置
方式一:Docker 快速启动
# 最简单的一行命令启动
docker run -d \
--name searxng \ # 容器名
-p 8080:8080 \ # 端口映射
-e SEARXNG_BASE_URL=http://localhost:8080 \ # 访问地址
searxng/searxng:latest # 官方 Docker 镜像
方式二:Docker Compose(推荐生产环境)
# docker-compose.yml
version: '3.8'
services:
searxng:
image: searxng/searxng:latest # 官方镜像
container_name: searxng # 容器名
ports:
- "8080:8080" # 端口映射
volumes:
- ./searxng:/etc/searxng:rw # 配置文件目录(可读写)
environment:
- SEARXNG_BASE_URL=http://localhost:8080 # 基础 URL
- SEARXNG_SECRET=your-secret-key-here # 密钥(随机字符串)
restart: unless-stopped # 自动重启
cap_drop:
- ALL # 安全:移除所有特权
cap_add:
- CHOWN # 只保留文件所有权管理
- SETGID # 设置组 ID
- SETUID # 设置用户 ID
# 先创建配置目录
mkdir -p searxng # 创建 searxng 配置目录
# 启动服务
docker compose up -d # 后台启动
# 查看日志
docker compose logs -f searxng # 实时查看日志
核心配置文件
# searxng/settings.yml
# SearXNG 的核心配置文件
use_default_settings: true # 以默认设置为基础
# 基本设置
general:
instance_name: "我的搜索引擎" # 实例名称
debug: false # 关闭调试模式
# 搜索设置
search:
safe_search: 0 # 安全搜索级别(0=关闭,1=中等,2=严格)
default_lang: "zh-CN" # 默认搜索语言:简体中文
formats:
- html # HTML 格式(网页界面)
- json # JSON 格式(API 调用,AI 项目必须开启)
# 服务器设置
server:
secret_key: "your-secret-key" # 密钥,务必修改
bind_address: "0.0.0.0" # 监听地址
port: 8080 # 端口
# 用户界面设置
ui:
default_theme: simple # 默认主题
default_locale: zh-Hans # 界面语言:中文
# 引擎配置(启用/禁用特定搜索引擎)
engines:
- name: google # Google 搜索
engine: google
disabled: false # 启用
shortcut: g # 快捷键 !g
- name: bing # Bing 搜索
engine: bing
disabled: false
shortcut: b # 快捷键 !b
- name: duckduckgo # DuckDuckGo
engine: duckduckgo
disabled: false
shortcut: ddg
- name: wikipedia # 维基百科
engine: wikipedia
disabled: false
shortcut: w
- name: arxiv # arXiv 论文
engine: arxiv
disabled: false
shortcut: ar
- name: github # GitHub 搜索
engine: github
disabled: false
shortcut: gh
基本使用
Web 界面搜索
1. 打开浏览器访问 http://localhost:8080
2. 在搜索框输入关键词
3. 结果来自多个搜索引擎的聚合
4. 可以在左侧面板选择搜索类别:
- General(通用)
- Images(图片)
- Videos(视频)
- News(新闻)
- Science(科学)
- Files(文件)
- IT(技术)
Bangs 快捷搜索
SearXNG 支持 !bangs 语法,直接跳转到特定搜索引擎:
!g 宏基因组 → 直接用 Google 搜索
!b snakemake → 直接用 Bing 搜索
!w 微生物 → 直接搜索维基百科
!gh kraken2 → 直接搜索 GitHub
!ar metagenomics → 直接搜索 arXiv 论文
!ddg python → 直接用 DuckDuckGo 搜索
JSON API 调用
import requests # HTTP 请求库
# 使用 JSON API 搜索(AI 项目常用)
response = requests.get(
"http://localhost:8080/search", # 搜索 API
params={
"q": "metagenome assembly", # 搜索关键词
"format": "json", # 返回 JSON 格式
"categories": "general", # 搜索类别
"language": "en" # 搜索语言
}
)
data = response.json() # 解析 JSON
# 遍历搜索结果
for result in data["results"][:5]: # 取前 5 条
print(f"标题: {result['title']}") # 标题
print(f"链接: {result['url']}") # URL
print(f"摘要: {result['content']}") # 摘要
print(f"引擎: {result['engines']}") # 来源引擎
print("---")
# curl 方式调用 API
curl "http://localhost:8080/search?q=bioinformatics&format=json" \
| python3 -m json.tool # 格式化输出 JSON
高级用法
配合 Perplexica 做 AI 搜索后端
# docker-compose.yml
# SearXNG + Perplexica 完整 AI 搜索方案
version: '3.8'
services:
searxng:
image: searxng/searxng:latest
ports:
- "4000:8080" # SearXNG 单独访问端口
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=http://searxng:8080
perplexica:
image: itzcrazykns/perplexica:latest
ports:
- "3000:3000" # Perplexica Web 界面
environment:
- SEARXNG_URL=http://searxng:8080 # 连接 SearXNG
- OLLAMA_URL=http://host.docker.internal:11434 # 连接本地 Ollama
depends_on:
- searxng
配合 LiteLLM 做搜索增强
import requests # HTTP 请求库
import openai # OpenAI SDK
def search_and_answer(question):
"""先搜索网页,再让 LLM 回答"""
# 第一步:用 SearXNG 搜索
search_results = requests.get(
"http://localhost:8080/search",
params={"q": question, "format": "json", "language": "zh-CN"}
).json()
# 第二步:提取搜索结果文本
context = ""
for r in search_results["results"][:5]: # 取前 5 条
context += f"标题: {r['title']}\n内容: {r['content']}\n\n"
# 第三步:把搜索结果喂给 LLM
client = openai.Client(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(
model="llama3.1:8b",
messages=[
{"role": "system", "content": f"根据以下搜索结果回答问题:\n{context}"},
{"role": "user", "content": question}
]
)
return response.choices[0].message.content
# 使用
answer = search_and_answer("什么是 MAGs?")
print(answer)
通过 Tor 实现匿名搜索
# searxng/settings.yml
# 添加 Tor 代理配置
outgoing:
proxies:
all://:
- socks5h://tor:9050 # 通过 Tor 网络代理所有搜索请求
# docker-compose.yml 添加 Tor 服务
services:
tor:
image: dperson/torproxy:latest
restart: unless-stopped
searxng:
image: searxng/searxng:latest
depends_on:
- tor
# ... 其他配置
常见报错与解决
| 报错信息 | 原因 | 解决方法 |
|---|
No results found | 搜索引擎被封或网络问题 | 检查网络连接,启用更多搜索引擎 |
JSON format not available | 未启用 JSON 输出 | 在 settings.yml 的 formats 中添加 json |
403 Forbidden | IP 被搜索引擎封禁 | 使用代理或 Tor,或等待一段时间 |
Connection refused | 容器未启动 | docker ps 检查容器状态 |
Settings file not found | 配置文件路径错误 | 确保 settings.yml 在挂载的卷目录中 |
| 搜索结果重复 | 多个引擎返回相同结果 | 正常现象,SearXNG 会自动去重 |
速查表
# === SearXNG 常用操作速查 ===
# Docker 快速启动
docker run -d -p 8080:8080 searxng/searxng:latest
# Docker Compose 启动
docker compose up -d
# 查看日志
docker compose logs -f searxng
# 重启服务
docker compose restart searxng
# Web 界面
# http://localhost:8080
# JSON API 搜索
curl "http://localhost:8080/search?q=关键词&format=json"
# Bangs 快捷搜索语法
# !g 关键词 → Google
# !b 关键词 → Bing
# !w 关键词 → Wikipedia
# !gh 关键词 → GitHub
# !ar 关键词 → arXiv
# 配置文件位置
# ./searxng/settings.yml
# 公共实例列表
# https://searx.space
与同类工具对比
| 特性 | SearXNG | Google | DuckDuckGo | Brave Search |
|---|
| 隐私保护 | 不追踪不记录 | 全面追踪 | 不追踪 | 基本不追踪 |
| 搜索引擎数 | 251 个聚合 | 1 个 | 1 个 | 1 个 |
| 自托管 | 支持 | 不支持 | 不支持 | 不支持 |
| API 接口 | JSON/CSV/RSS | 付费 API | 有限 | 付费 API |
| 广告 | 无 | 有 | 少量 | 少量 |
| Tor 支持 | 原生支持 | 不友好 | 支持 | 支持 |
| AI 搜索后端 | 常用 | 不适合 | 不适合 | 不适合 |
| 价格 | 完全免费 | 免费 | 免费 | 免费 |
选择建议:如果你需要一个隐私友好的日常搜索引擎,SearXNG 是最佳选择。如果你在做 AI 搜索项目(如 RAG),SearXNG 的 JSON API 是最方便的搜索后端。