Qings

SQLite 中文全文搜索:FTS5 trigram 实战

2026-07-18 技术 #Rust #Web 阅读 66

SQLite 中文全文搜索:FTS5 trigram 实战

SQLite 的 FTS5 提供 trigram 分词器:按连续三字符切分,天然适配中文子串匹配,不依赖词表与外部进程。

建索引

CREATE VIRTUAL TABLE posts_fts USING fts5(
    title, content_md,
    content='posts', content_rowid='id',
    tokenize='trigram'
);

外部内容表(external content)不重复存储正文,通过触发器与 posts 同步。

踩坑记录

  1. 三字起检:trigram 至少需要三个字符,搜索单字或双字没有索引命中,需要回退 LIKE 查询。
  2. 排序用 bm25:bm25(posts_fts) 分数越小相关度越高(与旧版 MySQL 的 MATCH ... AGAINST 方向相反)。
  3. 查询关键词在拼入前先清洗,去除引号、星号等检索语法字符,避免报错。

代码实现

if can_use_fulltext(&keyword) {
    // FTS5 MATCH + bm25 排序
} else {
    // 单字/双字词:LIKE 兜底
}

中文搜索没有银弹,结合业务量选择合适的召回策略即可。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 转载需注明出处:Qings · SQLite 中文全文搜索:FTS5 trigram 实战

评论(0)

正在回复
6 + 6 = ?

暂无评论,快来抢沙发