Skip to content

ai-search SearxNG 搜索引擎 ​

SearxNG 是一个强大且注重隐私的元搜索引擎,能够汇总来自多个搜索引擎的结果而不跟踪用户活动。本指南将引导您通过 Docker 部署 SearxNG,介绍其可用的 API,并提供如何有效使用这一强大工具的见解。


SearxNG 简介 ​

SearxNG 是一个开源的自托管元搜索引擎,强调用户隐私和灵活性。与传统搜索引擎不同,SearxNG 汇总来自多个搜索引擎的结果,而不存储任何用户数据,从而确保搜索体验的公正和私密。此外,SearxNG 高度可定制,允许用户配置各种方面,如搜索引擎、主题和 API 设置,以满足特定需求。

使用 Docker 部署 SearxNG ​

Docker 提供了一种简化部署应用程序的方法,通过将其封装在容器中。使用 Docker 部署 SearxNG 可以确保环境的一致性、易于扩展和简化管理。

Docker Compose 配置 ​

以下是用于部署 SearxNG 的 Docker Compose 配置:

yaml
services:
  searxng:
    image: docker.io/searxng/searxng:latest
    volumes:
      - ./searxng:/etc/searxng:rw
    ports:
      - 4000:8080
    networks:
      - perplexica-network
    restart: unless-stopped

关键组件:

  • 镜像(Image): 使用来自 Docker Hub 的最新 SearxNG 镜像。
  • 卷(Volumes): 将本地 ./searxng 目录挂载到容器内的 /etc/searxng,并具有读写权限,允许配置持久化。
  • 端口(Ports): 将主机的 4000 端口映射到容器内的 8080 端口,使服务可以通过 http://localhost:4000 访问。
  • 网络(Networks): 将容器连接到 perplexica-network Docker 网络。
  • 重启策略(Restart Policy): 确保容器在除非被明确停止外自动重启。

等效的 Docker Run 命令 ​

如果您更喜欢不使用 Docker Compose 部署 SearxNG,可以使用以下 docker run 命令实现相同的设置。根据您的要求,此命令不包含 networks 配置。

bash
docker run -d --name searxng --restart=always  -v ./searxng:/etc/searxng:rw -p 4000:8080 docker.io/searxng/searxng:latest

参数说明:

  • -d:以分离模式运行容器。
  • --name searxng:将容器命名为 searxng,便于管理。
  • -v ./searxng:/etc/searxng:rw:将本地 ./searxng 目录挂载到容器内的 /etc/searxng,并具有读写权限。
  • -p 4000:8080:将主机的 4000 端口映射到容器内的 8080 端口。
  • --restart unless-stopped:确保容器在除非被明确停止外自动重启。
  • docker.io/searxng/searxng:latest:指定要使用的 Docker 镜像。

部署步骤:

  1. 确保已安装 Docker:

    • 如果尚未安装 Docker,请从官方网站下载安装。
  2. 创建配置目录:

    • 在当前工作目录下创建一个名为 searxng 的目录,用于存储配置文件。
      bash
      mkdir searxng
  3. 运行 Docker 命令:

    • 在终端中执行上述 docker run 命令。
  4. 访问 SearxNG:

    • 打开您的网页浏览器,导航到 http://localhost:4000 以访问 SearxNG 界面。

探索 SearxNG API ​

SearxNG 提供了全面的 API,允许开发人员将其搜索功能集成到应用程序中,自动化查询并以编程方式检索搜索结果。

API 概述 ​

SearxNG API 是基于 REST 的,主要通过 HTTP GET 请求进行交互。以下是主要的端点及其功能:

  • 搜索端点(Search Endpoint): /search

    • 描述: 执行跨配置的搜索引擎的搜索查询。
    • 参数:
      • q(字符串):搜索查询。
      • categories(字符串):要包含的类别的逗号分隔列表(例如 general,images,videos)。
      • format(字符串):响应格式(json、jsonp、rss 等)。
      • language(字符串):搜索结果的语言代码。
      • time_range(字符串):结果的时间范围过滤(例如 day、week)。
  • 实例状态(Instance Status): /status.json

    • 描述: 获取 SearxNG 实例的当前状态,包括运行时间和处理的查询数量。
  • 偏好设置端点(Preferences Endpoint): /preferences.json

    • 描述: 获取当前用户的偏好设置。

启用 json 格式 ​

vi settings.yml
yml
formats:
  - html
  - json # 添加这一行

使用 SearxNG API ​

要使用 SearxNG API,您可以向相应的端点发送带有必要参数的 HTTP GET 请求。以下是如何使用 API 执行常见任务的示例。

示例 1:执行基本搜索 ​

请求:

http
GET http://localhost:4000/search?q=OpenAI&format=json
http://localhost:4000/search?q=OpenAI&format=json

描述: 搜索关键词 "OpenAI" 并以 JSON 格式返回结果。

示例响应:

json
{
  "query": "OpenAI",
  "number_of_results": 0,
  "results": [
    {
      "url": "https://openai.com/",
      "title": "Official site",
      "content": "Our work to create safe and beneficial AI requires a deep understanding of the potential risks and benefits, as well as careful consideration of the impact · We research generative models and how to align them with human values",
      "publishedDate": null,
      "thumbnail": null,
      "engine": "brave",
      "parsed_url": [
        "https",
        "openai.com",
        "/",
        "",
        "",
        ""
      ],
      "template": "default.html",
      "engines": [
        "google",
        "qwant",
        "duckduckgo",
        "brave"
      ],
      "positions": [
        1,
        1,
        1,
        2,
        1
      ],
      "score": 22.5,
      "category": "general"
    },
    ...
  ]
}

示例 2:按类别和语言过滤 ​

请求:

http
GET http://localhost:4000/search?q=Machine+Learning&categories=images,videos&language=en&format=json

描述: 在 images 和 videos 类别中搜索 "Machine Learning",将结果过滤为英语,并以 JSON 格式返回。

示例 3:获取实例状态 ​

请求:

http
GET http://localhost:4000/status.json

描述: 获取 SearxNG 实例的当前状态。

示例响应:

json
{
  "uptime": "5 days, 4 hours, 23 minutes",
  "queries_handled": 1523,
  "version": "SearxNG 0.16.0"
}

示例 4:访问用户偏好设置 ​

请求:

http
GET http://localhost:4000/preferences.json

描述: 获取 SearxNG 中设置的当前用户偏好设置。

示例响应:

json
{
  "language": "en",
  "categories": ["general", "images", "videos"],
  "theme": "light"
}

认证与安全 ​

默认情况下,SearxNG 不要求 API 访问进行认证。然而,为了增强安全性,特别是在通过互联网公开 API 时,建议实施认证机制,如 API 密钥,或限制访问仅限可信的 IP 地址。此外,启用 HTTPS 可以确保客户端与服务器之间传输的数据被加密。

使用第三方库 ​

笔者已经添加到了 java-opneai 库中,见代码实现: https://github.com/litongjava/java-openai/tree/main/src/main/java/com/litongjava/searxng

java
package nexus.io.searxng;

import org.junit.Test;

import nexus.io.tio.utils.json.JsonUtils;

public class SearxngSearchClientTest {

  @Test
  public void test() {
    SearxngSearchResponse response = SearxngSearchClient.search("What is the AI");
    System.out.println(JsonUtils.toJson(response));
  }
}

结论 ​

SearxNG 作为一个注重隐私的元搜索引擎,允许用户在不泄露个人数据的情况下进行搜索。使用 Docker 部署 SearxNG 简化了设置过程,确保了环境的一致性和可维护性。此外,强大的 API 支持使开发人员能够无缝地将 SearxNG 的搜索功能集成到各种应用程序中。

通过遵循本指南,您可以自信地部署 SearxNG,根据您的偏好进行定制,并利用其 API 来增强您的项目。拥抱开源搜索的力量,使用 SearxNG 掌控您的搜索体验。

MIT Licensed