Repolode
valeriansaliou

valeriansaliou/sonic

轻量级、无模式的搜索后端,只索引文本并返回 ID,可作为 Elasticsearch 的精简替代。

可替代:Elasticsearch

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. 1

    通过 Cargo 安装 Sonic

    cargo install sonic-server
  2. 2

    从仓库获取示例 config.cfg 并根据你的环境进行调整

  3. 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 数据每日更新。

相关项目