ai-search SearxNG 搜索引擎
SearxNG 是一个强大且注重隐私的元搜索引擎,能够汇总来自多个搜索引擎的结果而不跟踪用户活动。本指南将引导您通过 Docker 部署 SearxNG,介绍其可用的 API,并提供如何有效使用这一强大工具的见解。
SearxNG 简介
SearxNG 是一个开源的自托管元搜索引擎,强调用户隐私和灵活性。与传统搜索引擎不同,SearxNG 汇总来自多个搜索引擎的结果,而不存储任何用户数据,从而确保搜索体验的公正和私密。此外,SearxNG 高度可定制,允许用户配置各种方面,如搜索引擎、主题和 API 设置,以满足特定需求。
使用 Docker 部署 SearxNG
Docker 提供了一种简化部署应用程序的方法,通过将其封装在容器中。使用 Docker 部署 SearxNG 可以确保环境的一致性、易于扩展和简化管理。
Docker Compose 配置
以下是用于部署 SearxNG 的 Docker Compose 配置:
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
配置。
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 镜像。
部署步骤:
确保已安装 Docker:
- 如果尚未安装 Docker,请从官方网站下载安装。
创建配置目录:
- 在当前工作目录下创建一个名为
searxng
的目录,用于存储配置文件。mkdir searxng
- 在当前工作目录下创建一个名为
运行 Docker 命令:
- 在终端中执行上述
docker run
命令。
- 在终端中执行上述
访问 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
formats:
- html
- json # 添加这一行
使用 SearxNG API
要使用 SearxNG API,您可以向相应的端点发送带有必要参数的 HTTP GET 请求。以下是如何使用 API 执行常见任务的示例。
示例 1:执行基本搜索
请求:
GET http://localhost:4000/search?q=OpenAI&format=json
http://localhost:4000/search?q=OpenAI&format=json
描述: 搜索关键词 "OpenAI" 并以 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:按类别和语言过滤
请求:
GET http://localhost:4000/search?q=Machine+Learning&categories=images,videos&language=en&format=json
描述: 在 images
和 videos
类别中搜索 "Machine Learning",将结果过滤为英语,并以 JSON 格式返回。
示例 3:获取实例状态
请求:
GET http://localhost:4000/status.json
描述: 获取 SearxNG 实例的当前状态。
示例响应:
{
"uptime": "5 days, 4 hours, 23 minutes",
"queries_handled": 1523,
"version": "SearxNG 0.16.0"
}
示例 4:访问用户偏好设置
请求:
GET http://localhost:4000/preferences.json
描述: 获取 SearxNG 中设置的当前用户偏好设置。
示例响应:
{
"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
package com.litongjava.searxng;
import org.junit.Test;
import com.litongjava.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 掌控您的搜索体验。