Skip to main content

sonic

  • valeriansaliou/sonic
    • MPL-2.0, Rust
    • schema-less search backend
    • 基于 fs 存储搜索
    • 高性能、低内存
    • 单节点
    • 支持多语言
    • 存储区分 FST 和 KV
    • KV 为 RocksDB - Workd <-> Index 关系
    • FST 记录出现的词 - Finite-State Transducer
      • 每出现一个新词就会从新构建 fst
      • SUGGEST 基于 fst
      • 使用 Levenshtein distance 矫正 typo
    • 索引词会 Hash,fst 包含未 hash 词用于 SUGGEST
    • 推荐使用多 bucket 来分担 kv 压力
      • 非常适用于聊天这种有 session 的场景
    • 不会存储原文 - 查询返回给的 ID
    • 使用 ngram/trigrams 分词
  • 默认端口 1491
  • 参考
caution
  • SUGGEST 不支持中文 - valeriansaliou/sonic#203
  • 由于会设置 retain_word_objects 上限 - 导致部分连词无法搜索
    • 例如 文儿科技,因为科技出现的频度过高,会导致搜索 文儿科技 无结果,但搜索 文儿 有结果
# macOSbrew install sonic
docker run --rm -it \  -p 1491:1491 \  -v /path/to/your/sonic/config.cfg:/etc/sonic.cfg \  -v /path/to/your/sonic/store/:/var/lib/sonic/store/  --name sonic valeriansaliou/sonic
curl -LO https://github.com/valeriansaliou/sonic/raw/master/config.cfgsonic -c config.cfg

config.cfg#

[server]# debug, info, warn, errorlog_level = "error"

[channel]
inet = "[::1]:1491"tcp_timeout = 300auth_password=
[channel.search]# 默认查询返回数量query_limit_default = 10# 查询最多返回query_limit_maximum = 100# 结果不够尝试近似词query_alternates_try = 4# 默认推荐返回数量suggest_limit_default = 5# 推荐最多返回suggest_limit_maximum = 20

[store]
[store.kv]# 存储位置path = "./data/store/kv/"# World -> Index 数量 - 滑动窗口# 也就是说一个搜索词最多关联 1000 条记录 - offset 1000 不会返回数据# 设置过大影响性能 https://github.com/valeriansaliou/sonic/issues/258retain_word_objects = 1000
[store.kv.pool]# 不活跃时间间隔 - 关闭缓存数据库inactive_after = 1800
[store.kv.database]# 应该低于 store.kv.pool.inactive_afterflush_after = 900# 是否压缩 - zstdcompress = trueparallelism = 2# 最多打开文件数max_files =max_compactions = 1max_flushes = 1# 单位 KB - 默认 16MBwrite_buffer = 16384# WAL 避免丢失未 flush 的数据write_ahead_log = true
[store.fst]
path = "./data/store/fst/"
[store.fst.pool]
inactive_after = 300
[store.fst.graph]# 小于 store.fst.pool.inactive_afterconsolidate_after = 180# graph 文件大小限制# 单位 KB - 1024 倍数max_size = 2048# graph 中的词数max_words = 250000

Telnet#

telnet localhost 1491
CONNECTED <sonic-server v1.3.0>start search SecretPasswordsuggest foo test "wener"ping

FAQ

push executor term-to-iids object too long#

retain_word_objects 默认 1000,超过则不再索引