一款提供 API 的快速搜索引擎,支持全文、语义和混合搜索,可容忍拼写错误,适用于网站和应用。
- Star
- 21,367
- Fork
- 618
- 未关闭 Issue
- 53
- 最近提交
- 15小时前
这是什么?
Sonic 是一个用 Rust 编写的搜索后端。它把搜索词按集合(collection)组织在存储桶(bucket)中,查询结果返回对象 ID 而非完整文档,完整数据仍保存在外部数据库中,Sonic 只负责找出匹配的 ID。服务运行时可以增删索引条目,支持拼写纠错、通过 suggest 命令实现词语自动补全,并能根据语言去除停用词。
它适合不需要 Elasticsearch 那样重型系统、但又需要搜索功能的场景。项目给出的测量数据显示,在负载下内存占用约 30 MB,查询耗时在微秒级,测试环境为单机。客户端通过名为 Sonic Channel 的简单 TCP 协议连接,官方提供 Node.js、Rust、PHP 库,社区也有 Python、Go、Java 等语言的客户端。
需要注意的是,Sonic 不提供 HTTP 接口,索引也不会整体装入内存,因此建议把数据库放在 SSD 上以获得较好的查询性能。
核心功能
- 01只存储标识符,结果指向外部数据库中的记录。
- 02在精确匹配结果不足时自动纠正查询中的拼写错误。
- 03通过 suggest 命令实时补全单词。
- 04服务运行期间可以增加和删除索引条目。
- 05支持多种语言的停用词过滤,部分语言支持词干提取。
- 06使用名为 Sonic Channel 的简单 TCP 协议,并提供多种语言的客户端库。
适用场景
- 为聊天或工单系统增加全文搜索,原始数据仍存放在独立数据库中。
- 在用户搜索界面中实现实时的词语提示功能。
- 在小型服务器上部署轻量搜索服务,替代 Elasticsearch。
快速上手
- 1
通过 Cargo 安装 Sonic
cargo install sonic-server - 2
从仓库获取示例 config.cfg 并根据你的环境进行调整
- 3
使用你的配置文件运行 Sonic
./sonic -c /path/to/config.cfg
使用前须知
- 构建需要 RocksDB 的系统依赖,例如 clang、libclang-dev 和 llvm-dev。
- Sonic 只返回标识符,因此需要外部数据库来加载完整记录。
- 没有 HTTP 接口,必须通过 Sonic Channel 协议或客户端库进行交互。
标签
常见问题
- sonic 是什么?
- 轻量级、无模式的搜索后端,只索引文本并返回 ID,可作为 Elasticsearch 的精简替代。 Sonic 是一个用 Rust 编写的搜索后端。它把搜索词按集合(collection)组织在存储桶(bucket)中,查询结果返回对象 ID 而非完整文档,完整数据仍保存在外部数据库中,Sonic 只负责找出匹配的 ID。服务运行时可以增删索引条目,支持拼写纠错、通过 suggest 命令实现词语自动补全,并能根据语言去除停用词。
- sonic 可以免费使用吗?用的什么许可证?
- sonic 以 MPL-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- sonic 还在维护吗?
- 活跃维护中。sonic 最近一次提交是在 2026年10月21日。
- sonic 适合用来做什么?
- 为聊天或工单系统增加全文搜索,原始数据仍存放在独立数据库中。 在用户搜索界面中实现实时的词语提示功能。 在小型服务器上部署轻量搜索服务,替代 Elasticsearch。
- sonic 怎么安装和运行?
- 通过 Cargo 安装 Sonic: cargo install sonic-server 从仓库获取示例 config.cfg 并根据你的环境进行调整 使用你的配置文件运行 Sonic: ./sonic -c /path/to/config.cfg
- 在哪里获取 sonic?
- 源代码和安装说明在 GitHub 上:https://github.com/valeriansaliou/sonic
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
开源搜索数据库,支持全文、向量与混合检索,支持实时索引和 SQL,可作为 Elasticsearch 的替代方案。
为 Redis 数据提供全文检索、二级索引、向量相似度搜索和聚合查询的查询引擎模块。
可自托管的私人搜索引擎,索引你访问过的网页和保存的文件,支持网页、终端和通过 MCP 连接的 AI 助手检索。
一个用 Rust 编写、受 Apache Lucene 启发的全文搜索引擎库,用于在应用中构建搜索功能。
Typesense 是一个开源的内存搜索引擎,支持容错拼写、分面筛选、地理搜索和向量搜索,是 Algolia 和 Elasticsearch 的易用替代方案。