mcpField
S
searxng-search

searxng-search

github.com/ypares生产力30830 次安装今天更新
代码仓库

关于 searxng-search

SearXNG Search 提供本地 SearXNG 元搜索环境及命令行查询示例,可搜索网页、代码、仓库和软件包来源。它面向需要按类别获取 JSON 结果的用户,并通过辅助脚本启动和配置容器。

主要功能

  1. 01启动和停止本地 SearXNG
  2. 02以 JSON 返回搜索结果
  3. 03搜索网页、代码和仓库
  4. 04按类别搜索软件包来源
  5. 05限制结果数量并组合类别

适用场景

  1. 01在本地环境中搜索网页
  2. 02查找 Cargo 或 npm 软件包
  3. 03定位代码仓库和 IT 资源
  4. 04获取并筛选结构化搜索结果

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ypares/agent-skills --skill searxng-search

安装后在 Claude Code 中输入/searxng-search确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
references/
agent-usage.md
category-guide.md
package-engine-status.md
pypi-direct-search.md
scripts/
searx
start-searxng

详细介绍

SearXNG 搜索

SearXNG 是一款尊重隐私的元搜索引擎,可在本地运行。它会汇总多个搜索引擎和软件包仓库的结果,并返回简洁的 JSON 输出。

快速开始

启动 SearXNG:

start-searxng --detach

此操作将:

  • 自动检测 podman 或 docker
  • 创建启用了 JSON 输出的最简配置
  • 在 http://localhost:8888 启动 SearXNG
  • 等待服务就绪

停止 SearXNG:

podman stop searxng  # or: docker stop searxng

自定义端口:

start-searxng --port 9999 --detach

快速参考

任务命令类别
常规网页搜索curl "http://localhost:8888/search?q=<query>&format=json"general
搜索 Cargo/crates.iocurl "http://localhost:8888/search?q=<crate>&format=json&categories=cargo"cargo
搜索 npm 软件包curl "http://localhost:8888/search?q=<pkg>&format=json&categories=packages"packages
搜索代码仓库curl "http://localhost:8888/search?q=<query>&format=json&categories=repos"repos
搜索 IT 资源curl "http://localhost:8888/search?q=<query>&format=json&categories=it"it
限制结果数量在 URL 中添加 &limit=N-
多个类别&categories=cat1,cat2-

可用类别

运行以下命令以查看所有类别:

curl -s "http://localhost:8888/config" | jq '.categories'

值得关注的类别:

  • general:常规网页搜索(默认)
  • cargo:来自 crates.io 的 Rust crate
  • packages:多仓库(npm、rubygems、haskell/hoogle、hex、packagist、metacpan、pub.dev、pkg.go.dev、docker hub、alpine 等)
  • it:IT/技术资源(包括 GitHub、Docker Hub、crates.io)
  • repos:代码仓库
  • code:代码搜索
  • scientific publications:学术论文
  • news、videos、images、books 等

有关全面的软件包搜索测试结果,请参阅 package-engine-status.md。

JSON 响应结构

{
  "query": "search term",
  "number_of_results": 0,
  "results": [
    {
      "url": "https://example.com",
      "title": "Result Title",
      "content": "Snippet of content...",
      "publishedDate": "2025-01-01T00:00:00",
      "engine": "duckduckgo",
      "engines": ["duckduckgo", "startpage"],
      "score": 3.0,
      "category": "general"
    }
  ],
  "answers": [],          // Direct answers/infoboxes
  "suggestions": [],      // Search suggestions
  "corrections": [],      // Query corrections
  "infoboxes": [],       // Knowledge panels
  "unresponsive_engines": []
}

常见用法模式

1. 软件包仓库搜索

Cargo/Rust crate:

curl -s "http://localhost:8888/search?q=tokio&format=json&categories=cargo" | \
  jq '.results[] | {title, url, content}'

npm 软件包:

curl -s "http://localhost:8888/search?q=express&format=json&categories=packages" | \
  jq '.results[] | select(.engines[] == "npm") | {title, url, content}'

PyPI 软件包(变通方法,见下文):

# PyPI engine is enabled but not returning results in current SearXNG config
# Use direct API or qypi CLI instead (see PyPI Workaround section)
2. 带筛选条件的网页搜索

IT/技术搜索:

curl -s "http://localhost:8888/search?q=rust+async&format=json&categories=it" | \
  jq '.results[0:5] | .[] | {title, url, engines}'

GitHub 仓库:

curl -s "http://localhost:8888/search?q=machine+learning&format=json&categories=repos" | \
  jq '.results[] | select(.engines[] == "github") | {title, url}'
3. 提取特定信息

获取排名前 3 的结果:

curl -s "http://localhost:8888/search?q=rust+ownership&format=json" | \
  jq '.results[0:3] | .[] | {title, url, content}'

查看哪些引擎返回了结果:

curl -s "http://localhost:8888/search?q=python&format=json" | \
  jq '.results[0].engines'

获取答案框/信息框:

curl -s "http://localhost:8888/search?q=rust+language&format=json" | \
  jq '.infoboxes, .answers'

PyPI 变通方法

由于 PyPI 在 SearXNG 中未返回结果(尽管已启用),请使用以下替代方案:

选项 1:PyPI JSON API
# Search (limited to simple package name matching)
curl -s "https://pypi.org/pypi/<package>/json" | jq '.info | {name, summary, version, home_page}'

# Example:
curl -s "https://pypi.org/pypi/requests/json" | jq '.info.summary'
选项 2:qypi CLI 工具
# Install
uvx qypi search pandas --json

# Get package info
uvx qypi info requests --json

# List releases
uvx qypi releases flask --json

更多详情请参阅 references/pypi-direct-search.md。

与 Nushell 集成

创建一个辅助函数:

def searx [
  query: string,
  --category (-c): string = "general",
  --limit (-l): int = 10
] {
  http get $"http://localhost:8888/search?q=($query | url encode)&format=json&categories=($category)"
  | get results
  | first $limit
  | select title url content engines
}

用法:

searx "tokio async" --category cargo --limit 5
searx "flask tutorial" --category general

调试

检查 SearXNG 配置:

curl -s "http://localhost:8888/config" | jq '.engines[] | select(.name == "pypi")'

检查引擎错误:

curl -s "http://localhost:8888/search?q=test&format=json" | jq '.unresponsive_engines'

测试指定引擎:

curl -s "http://localhost:8888/search?q=flask&format=json&engines=pypi" | jq .

已知问题

  • PyPI 引擎已启用但无法正常工作:使用直接 API 或 qypi CLI 作为变通方案
  • Cargo 类别有时会返回空结果:尝试使用 categories=packages 或 categories=it,它们也包含 crates.io
  • 速率限制:如果短时间内请求过多,SearXNG 可能会进行速率限制

配置

使用辅助脚本(推荐)

start-searxng 脚本会自动创建最简配置:

start-searxng --help

默认配置包括:

  • use_default_settings: true(继承 SearXNG 的所有默认设置)
  • 已启用 JSON 格式
  • 已禁用速率限制(供本地使用)
  • 密钥(请在生产环境中更改!)
使用自己的配置
start-searxng --config /path/to/your/config/dir

你的配置目录中应包含 settings.yml。

手动启动容器
# Create config
mkdir -p /tmp/searxng-config
cat > /tmp/searxng-config/settings.yml << 'EOF'
use_default_settings: true
search:
  formats:
    - html
    - json
server:
  secret_key: "change-me-in-production"
  bind_address: "0.0.0.0"
  port: 8080
EOF

# Start with podman
podman run --rm -d --name searxng \
  -p 8888:8080 \
  -v /tmp/searxng-config:/etc/searxng:Z \
  docker.io/searxng/searxng:latest

# Or with docker
docker run --rm -d --name searxng \
  -p 8888:8080 \
  -v /tmp/searxng-config:/etc/searxng \
  docker.io/searxng/searxng:latest
查看日志
podman logs searxng  # or: docker logs searxng
高级配置

有关所有选项,请参阅 SearXNG Settings Documentation。

在默认设置中添加 JSON 输出的最简配置:

use_default_settings: true
search:
  formats:
    - html
    - json

评论

支持 Markdown