Sonic是一个快速、轻量级且无模式的搜索后端。它能够摄取搜索文本和标识符元组,然后在微秒级时间内对其进行查询。
在某些使用场景下,Sonic可以作为超重且功能齐全的搜索后端(如Elasticsearch)的简单替代品。它能够规范化自然语言搜索查询,自动完成搜索查询,并提供最相关的查询结果。Sonic是一个标识符索引,而非文档索引;当被查询时,它返回的是ID,这些ID可以用于在外部数据库中引用匹配的文档。
在设计Sonic时,我们特别注重性能和代码整洁度。它旨在做到无崩溃、超快速,并对服务器资源施加最小压力(我们的测量显示,Sonic在负载下对搜索查询的响应时间在微秒级范围内,占用约30MB内存,CPU占用率低;查看我们的基准测试)。
在Rust版本:rustc 1.74.1 (a28077b28 2023-12-04)
上测试
🇫🇷 在法国南特精心打造。
:newspaper: Sonic项目最初在我的个人博客文章中宣布。
"Sonic"是Sonic项目的吉祥物。我将它画成一只迷幻的嬉皮士刺猬。
👋 你使用Sonic并想在这里列出吗?联系我。
Sonic已集成到Crisp平台上的所有Crisp搜索产品中。截至2019年,它在一台每月5美元的1-vCPU SSD云服务器上用于索引5亿个对象。Crisp用户使用它来搜索他们的消息、对话、联系人、帮助中心文章等。
你可以在Crisp帮助中心上实时测试Sonic,并了解Sonic搜索结果的速度和相关性。你还可以从那里测试搜索建议:为一个词至少输入2个字符,就会得到一个完整词的建议(按tab键展开建议)。搜索和建议都由Sonic提供支持。
Sonic 在帮助中心文章中的模糊搜索表现出色。查找任何单词或短语组合,立即获得结果。
Sonic是用Rust构建的。要安装它,你可以从Sonic发布页面下载版本,使用cargo install
或从master
分支拉取源代码。
👉 每个发布的二进制文件都附带一个.asc
签名文件,可以使用@valeriansaliou的GPG公钥进行验证::key:valeriansaliou.gpg.pub.asc。
👉 从包安装:
Sonic为基于Debian的系统(Debian、Ubuntu等)提供预构建包。
重要提示:Sonic目前仅提供针对Debian 12(代号:bookworm
)的64位包。你可能仍然能够在其他Debian版本以及Ubuntu上使用它们,尽管它们依赖于特定版本的glibc
,这可能在较旧或较新的系统上不可用。
首先,添加Sonic APT仓库(例如,对于Debian bookworm
):
echo "deb [signed-by=/usr/share/keyrings/valeriansaliou_sonic.gpg] https://packagecloud.io/valeriansaliou/sonic/debian/ bookworm main" > /etc/apt/sources.list.d/valeriansaliou_sonic.list
curl -fsSL https://packagecloud.io/valeriansaliou/sonic/gpgkey | gpg --dearmor -o /usr/share/keyrings/valeriansaliou_sonic.gpg
apt-get update
然后,安装Sonic包:
apt-get install sonic
接着,编辑预填充的Sonic配置文件:
nano /etc/sonic.cfg
最后,重启Sonic:
service sonic restart
👉 从源代码安装:
如果你从Git拉取了源代码,可以使用cargo
构建:
cargo build --release
你可以在./target/release
目录中找到构建好的二进制文件。
安装build-essential
、clang
、libclang-dev
、libc6-dev
、g++
和llvm-dev
以便能够编译所需的RocksDB依赖。
注意,在构建Sonic时可以启用以下可选功能:allocator-jemalloc
、tokenizer-chinese
和tokenizer-japanese
(某些功能可能默认已启用)。
👉 从Cargo安装:
你可以直接使用cargo install
安装Sonic:
cargo install sonic-server
确保你的$PATH
正确配置以源自Crates二进制文件,然后使用sonic
命令运行Sonic。
安装build-essential
、clang
、libclang-dev
、libc6-dev
、g++
和llvm-dev
以便能够编译所需的RocksDB依赖。
👉 从Docker Hub安装:
通过Docker运行Sonic可能会很方便。你可以在Docker Hub上找到预构建的Sonic镜像,名为valeriansaliou/sonic。
首先,拉取 valeriansaliou/sonic
镜像:
docker pull valeriansaliou/sonic:v1.4.9
然后,为其提供配置文件并运行(将 /path/to/your/sonic/config.cfg
替换为你的配置文件路径):
docker run -p 1491:1491 -v /path/to/your/sonic/config.cfg:/etc/sonic.cfg -v /path/to/your/sonic/store/:/var/lib/sonic/store/ valeriansaliou/sonic:v1.4.9
在配置文件中,确保:
channel.inet
设置为 0.0.0.0:1491
(这允许从容器外部访问 Sonic)store.kv.path
设置为 /var/lib/sonic/store/kv/
(这允许 Sonic 访问外部 KV 存储目录)store.fst.path
设置为 /var/lib/sonic/store/fst/
(这允许 Sonic 访问外部 FST 存储目录)Sonic 将可通过 tcp://localhost:1491
访问。
👉 从其他来源安装(非官方):
其他安装来源包括:
brew install sonic
(查看 formula)注意,这些来源是非官方的,意味着它们不由 Sonic 项目所有者拥有或维护。与 Sonic 项目提供的最 新版本相比,这些来源提供的 Sonic 版本可能过时。
使用示例 config.cfg 配置文件,并根据你的环境进行调整。
如果你想微调配置,可以阅读我们的详细配置文档。
Sonic 可以这样运行:
./sonic -c /path/to/config.cfg
搜索和对象管理(即数据摄入)仅通过 Sonic Channel 协议处理。为了保持 Sonic 的简单性(类似于 Redis),Sonic 不提供 HTTP 端点或类似功能;当你需要与 Sonic 搜索数据库交互时,通过 Sonic Channel 连接是唯一的方式。
Sonic 提供官方库,让你能轻松将 Sonic 集成到你的应用中。点击下面的库以查看库集成文档和代码。
如果你想了解原始 Sonic Channel 基于 TCP 的协议详情,可以阅读我们的详细协议文档。如果你想编写自己的 Sonic Channel 库,这可能会很有用。
Sonic 为你的编程语言提供官方 Sonic 集成库(官方意味着这些库已经由核心维护者审查和验证):
以下是社区提供的 Sonic 集成列表(非常感谢他们的贡献!):
ℹ️ 找不到适合你编程语言的库?构建你自己的库并在此处被引用!(联系我)
Sonic 在其词法系统中支持广泛的语言。如果某种语言不在此列表中,你仍然可以将该语言推送到搜索索引,但停用词不会被排除,这可能导致搜索结果质量降低。
词法系统支持的语言有:
Sonic 从一开始就是为 Crisp 而构建的。随着 Crisp 的增长和将越来越多的搜索数据索引到全文搜索 SQL 数据库中,我们决定是时候切换到一个合适的搜索后端系统了。在审查 Elasticsearch(ELS)和其他系统时,我们发现这些都是功能齐全的重量级系统,无法很好地适应 Crisp 基于免费增值的成本结构。
最终,我们决定构建自己的搜索后端,设计成简单且对资源要求轻量的系统。
您可以使用以下命令运行函数级基准测试:cargo bench --features benchmark
我们提取了 Crisp 自身客户支持团队使用的所有消息。
我们想将所有这些消息导入到一个全新的 Sonic 实例中,然后对我们建立的索引执行搜索。我们将测量 Sonic 执行每个操作所花费的时间(即通过 Sonic Channel 执行的每个 PUSH
和 QUERY
命令),并将结果按每 1,000 次操作分组(这会输出每 1,000 次操作的平均时间)。
我们的基准测试在以下计算机上运行:
Sonic 的编译方式如下:
rustc 1.35.0-nightly (719b0d984 2019-03-13)
release
配置(-03
和 lto
)我们的数据集如下:
我们用于执行基准测试的脚本是:
我们的发现:
每次操作的比较结果(针对单个对象):
我们从批处理操作中抽取了8个结果样本,这些样本产生了总共1,000个结果(100万项,每1,000项批量进行一次测量报告)。
这并不是很科学,但应该能让你清楚了解Sonic的性能。
每次操作所花费的时间:
操作 | 平均 | 最佳 | 最差 |
---|---|---|---|
PUSH | 275μs | 190μs | 363μs |
QUERY | 880μs | 852μs | 1ms |
从终端看到的批量PUSH结果(从初始索引:0个对象):
[批量PUSH基准测试图片]
从终端看到的批量QUERY结果(在索引:1,000,000个对象上):
[批量QUERY基准测试图片]
索引数据限制: Sonic设计用于在每个集合中分割成数千个搜索桶的大型搜索索引。IID(即内部ID)在索引中存储为32位数字,理论上每个桶可以索引多达约42亿个对象(即OID)。我们观察到30%到40%的存储节省,这证明了在大型数据库上的权衡是合理的(相比Sonic使用64位IID)。此外,Sonic仅以滑动窗口方式保留给定词的N个最近推送的结果(滑动窗口宽度可配置)。
搜索查询限制: 出于存储紧凑性考虑,Sonic的自然语言处理系统(NLP)不在句子级别工作(我们保持FST图的浅层以减少时间和空间复杂度)。它在词级别工作,因此能够进行按词搜索并基于用户输入预测词,但无法预测句子中的下一个词。
实时限制: 每次向桶图推送或弹出词时都需要重建FST。由于这相当耗费资源,Sonic会批量进行重建周期。如果你刚刚向索引推送了一个新词,但在SUGGEST
命令中还看不到它,请等待下一个重建周期启动,或在control
通道中使用TRIGGER consolidate
强制执行。
互操作性限制: Sonic Channel协议是读写Sonic搜索索引中搜索条目的唯一方式。Sonic不提供任何HTTP API。Sonic Channel的设计考虑了性能和最小网络占用。如果你需要从不受支持的编程语言访问Sonic,你可以提出问题或参考node-sonic-channel实现,并在你的目标编程语言中构建它。
硬件限制: Sonic直接在文件系统上执行搜索;即它不将索引放入RAM。搜索查询会导致大量随机访问磁盘,这意味着在老式HDD上会相当慢,而在较新的SSD上会超快。请仅将Sonic数据库存储在SSD支持的文件系统上。
如果你在Sonic中发现漏洞,非常欢迎你直接向@valeriansaliou报告,方法是发送加密电子邮件至valerian@valeriansaliou.name。请勿在公开的GitHub问题中报告漏洞,因为恶意人员可能会利用它们来攻击运行未修补Sonic实例的生产服务器。
:warning: 你必须使用@valeriansaliou的GPG公钥加密你的电子邮件: :key:valeriansaliou.gpg.pub.asc。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、 年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号