SQLite 中文全文搜索:FTS5 trigram 实战
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 同步。
踩坑记录
- 三字起检:trigram 至少需要三个字符,搜索单字或双字没有索引命中,需要回退 LIKE 查询。
- 排序用 bm25:
bm25(posts_fts)分数越小相关度越高(与旧版 MySQL 的MATCH ... AGAINST方向相反)。 - 查询关键词在拼入前先清洗,去除引号、星号等检索语法字符,避免报错。
代码实现
if can_use_fulltext(&keyword) {
// FTS5 MATCH + bm25 排序
} else {
// 单字/双字词:LIKE 兜底
}
中文搜索没有银弹,结合业务量选择合适的召回策略即可。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 转载需注明出处:Qings · SQLite 中文全文搜索:FTS5 trigram 实战
评论(0)
正在回复
暂无评论,快来抢沙发