Sonic : 一个轻量无模式的搜索后端

2019 年 7 月 20 日

Sonic : 一个轻量无模式的搜索后端

Sonic是一个开源的、无模式的搜索后端,能够在某些情况下中替代Elasticsearch等全功能的搜索系统。Sonic 能够规范自然语言的搜索查询,提供自动补全功能,并为搜索查询返回最相关的结果。与文档索引相反,Sonic 实现了一个标识符索引,其查询返回了一个可以被外部数据库解析的 ID 列表。Sonic 由Crisp的工程师设计,主要用于 Crisp 客服消息服务的搜索。


Sonic 中的索引数据存储在由桶结构组成的集合中。Sonic 可以使用单个桶,也可以通过配置使用多个桶,这样就可以为不同的搜索用例定制不同的索引。搜索查询返回了用于外部数据库解析的对象标识符。这样的设计决策最大限度地减少了磁盘上存储的数据。Sonic 提供了额外的功能,例如查询中的拼写错误更正,查询词自动补全,并对超过八十种语言提供了 Unicode 支持。查询和索引是通过 Sonic Channel 协议完成的,该协议对 Node.js、PHP、Rust、Go 和 Python 等语言都提供了支持


Sonic 搜索引擎由一个倒排索引组成。要索引的句子被拆分成单词并存储为键值对,单词为键而句子则为索引值对象,在查询匹配时返回该对象。数据存储在RocksDB支持的键值数据库中。当从一个索引中添加或删除对象时,将会有一个后台作业专门负责索引的更新,这样搜索时就能够获取最新的索引。Sonic 由 Rust 语言编写,这是一种专注于安全性的现代编程语言,它提供了一个编译的二进制文件,并且没有垃圾收集器,因为垃圾收集器会影响 Sonic 的实时内存管理需求。


根据 Crisp 的联合创始人Valerian Saliou所述,Sonic 的灵感来自于 Redis 的轻量级开源设计。Sonic 又被称为“搜索中的 Redis”。为了实现类似的轻量级实现,Sonic 的设计师在决定其新功能时遵循以下标准:


  • 这个功能真的需要吗?

  • 我们怎样才能让它变得简单?

  • 添加该功能后,Sonic仍然是快速和轻量级的么?

  • 这个很棒的功能会让Sonic变得很难配置么?


为了满足这些标准,Sonic 的开发者需要做出一些取舍。自然语言处理(NLP)系统工作在词而不是句子的层面,它可以预测词,但不能预测句子中的下一个词。这个决策允许使用有穷状态转换器(FST)图,能够修正输入错误,保持浅显,从而降低了时间和空间的复杂度,也最小化了存储需求。Sonic 对 FST 重建周期进行批处理,这意味着对搜索索引的更新并不是完全实时的,新的索引在下一个构建周期之前可能不会出现。此外,Sonic Protocol Channel 是目前唯一支持与 Sonic 交互的协议,HTTP API 仍然不支持。


用户可以在Crisp帮助页面进行 Sonic 在线测试。更多关于 Sonic 安装和管理的信息请参阅Sonic Github页面


原文链接


Sonic: A Lightweight, Schema-Less Search


2019 年 7 月 20 日 08:003120
用户头像

发布了 36 篇内容, 共 15.7 次阅读, 收获喜欢 54 次。

关注

评论

发布
暂无评论
发现更多内容

一代版本一代神:利用Docker在Win10系统极速体验Django3.1真实异步(Async)任务

刘悦的技术博客

django python3.x 异步 异步任务

智慧公安情报研判大数据系统分析平台搭建

t13823115967

智慧公安

架构师训练营 1 期第 11 周:安全稳定 - 作业

灵霄

极客大学架构师训练营

AI技术在音视频领域的发展

anyRTC开发者

人工智能 ios android AI WebRTC

公安大数据可视化指挥决策平台建设,智慧警务系统开发

WX13823153201

【Java并发编程】阿里最喜欢问的几道线程池的面试题?

java金融

Java 面试题 线程池

IDEA插件:多线程文件下载插件开发

Silently9527

Java 多线程 idea插件 文件传输

架构师训练营第六周作业

Geek_xq

简明设计模式—创建型

2970

golang 设计模式

推陈出新,一步到位,智慧水务这么用效率翻倍

一只数据鲸鱼

物联网 数据采集 智慧城市 组态软件 智慧水务

太平金科助力“开局之战”顺利启动,博睿数据“A+N”一体化解决方案全力护航

BonreeAPM

APM npm AIOPS

咨询师的诱惑

escray

面经 大龄程序员 面试经历 101次面试

云原生时代跨语言间微服务的打法

Damon

Kubernetes 微服务框架

架构师训练营 1 期第 9 周:性能优化(三)

灵霄

极客大学架构师训练营

架构师训练营 1 期第 10 周:模块分解 - 作业

灵霄

极客大学架构师训练营

【Java并发编程】面试必备之线程池

java金融

线程池

架构师训练营 1 期第 12 周:数据应用(一) - 作业

灵霄

极客大学架构师训练营

生产环境全链路压测建设历程 22:FAQ 1&2

数列科技杨德华

全链路压测 七日更

架构师训练营 1 期第 13 周:数据应用(二) - 作业

灵霄

极客大学架构师训练营

Go 并发基础

Damon

go Go web

像用户一样测试:不妨犯傻

QualityFocus

软件测试 体验 可用性 用户体验

博睿数据支持腾讯云函数监控,Serverless时代已来临

BonreeAPM

Serverless APM 监控

LeetCode题解:剑指 Offer 40. 最小的k个数,二叉堆,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

数字资产钱包系统开发及介绍

系统开发咨询:I76-883I-5I52 邓森

智慧警务平台搭建,大数据时代下的警务模式

t13823115967

智慧警务大数据系统开发

即构低延迟直播产品L3,打造更优质的实时互动体验

ZEGO即构

架构师训练营第六周总结

Geek_xq

京东将上线社区团购“京喜拼拼”:社区团购是否是一次泡沫大战

石头IT视角

也谈“中年焦虑”

程序员架构进阶

方法论 职业规划 中年危机

网易有道 iOS二面经验分享

iOSer

ios 面试题 网易 大厂面试 iOS面试

Devil Fruit恶魔果实APP系统软件开发

开發I852946OIIO

系统开发

Sonic : 一个轻量无模式的搜索后端-InfoQ