好,我给你整理一份可以直接当博客用的 Markdown 总结,结构清晰、偏实战,适合以后自己翻、也适合发博客。
你直接复制下面内容保存成 sqlite-fts.md 就行。
SQLite FTS(全文检索)使用总结
SQLite FTS(Full Text Search)是 SQLite 内置的全文检索引擎
不依赖外部服务,却能提供接近搜索引擎级别的文本查询能力。
一、为什么要用 FTS?
普通 LIKE 查询的问题
1
| SELECT * FROM article WHERE content LIKE '%Rust%';
|
- 无法使用索引
- 数据量一大就全表扫描
- 模糊查询性能差
FTS 的优势
- 自动建立全文索引(倒排索引)
- 查询速度快(数量级提升)
- 适合搜索框、文档、说明、描述类字段
二、FTS 是什么?
- FTS 是一种 虚拟表(VIRTUAL TABLE)
- 由 SQLite 内置模块提供
- 当前主流版本是 FTS5
1 2
| CREATE VIRTUAL TABLE docs USING fts5(title, body);
|
📌 不需要手动建索引,FTS 会自动维护全文索引。
三、基本使用流程
1️⃣ 创建 FTS 表
1 2
| CREATE VIRTUAL TABLE docs USING fts5(title, body);
|
2️⃣ 插入数据
1 2 3
| INSERT INTO docs (title, body) VALUES ('Rust 教程', 'Rust 是一门系统级编程语言'), ('SQLite 指南', 'SQLite 支持全文检索 FTS');
|
3️⃣ 使用 MATCH 查询(核心)
1
| SELECT * FROM docs WHERE docs MATCH 'Rust';
|
MATCH 是 FTS 专用操作符,不能用 LIKE 代替。
四、常见查询语法
1️⃣ 单关键词搜索
1
| SELECT * FROM docs WHERE docs MATCH 'Rust';
|
2️⃣ 多关键词(AND)
1
| SELECT * FROM docs WHERE docs MATCH 'SQLite FTS';
|
等价于:
👉 同时包含 SQLite 和 FTS
3️⃣ OR 查询
1
| SELECT * FROM docs WHERE docs MATCH 'Rust OR SQLite';
|
4️⃣ 前缀搜索
1
| SELECT * FROM docs WHERE docs MATCH '编程*';
|
等价于高性能的 LIKE '编程%'
5️⃣ 指定字段搜索
1
| SELECT * FROM docs WHERE docs MATCH 'title:Rust';
|
五、FTS 和 LIKE 的对比
| 对比项 |
LIKE |
FTS |
| 索引 |
❌ |
✅ |
| 模糊搜索 |
慢 |
快 |
| 全文检索 |
❌ |
✅ |
| 数据量支持 |
小 |
大 |
| 使用场景 |
简单匹配 |
搜索框 |
📌 FTS 更像搜索引擎,而不是字符串函数。
六、中文搜索说明
默认行为
1
| SELECT * FROM docs WHERE docs MATCH '中国';
|
在大多数中文项目中已经够用。
常用配置(unicode61)
1 2
| CREATE VIRTUAL TABLE docs USING fts5(content, tokenize = 'unicode61');
|
七、FTS + 普通表(推荐项目结构)
普通业务表
1 2 3 4 5
| CREATE TABLE article ( id INTEGER PRIMARY KEY, author TEXT, created_at TEXT );
|
FTS 表(只存需要搜索的字段)
1 2 3 4 5 6 7
| CREATE VIRTUAL TABLE article_fts USING fts5( title, content, content='article', content_rowid='id' );
|
查询时 JOIN
1 2 3 4
| SELECT article.* FROM article JOIN article_fts ON article.id = article_fts.rowid WHERE article_fts MATCH 'Rust';
|
📌 这是实际工程中最常见的用法。
八、适用场景
适合使用 FTS 的情况:
- 搜索框
- 文档系统 / 知识库
- 日志 / 说明 / 描述字段
- 数据量 ≥ 几万条
不适合:
九、使用注意事项
- FTS 表不能使用普通
= / LIKE
- 必须使用
MATCH
- FTS 表适合做「索引层」,不建议存业务字段
- 删除/更新数据要同步维护 FTS 表
十、一句话总结
SQLite FTS = 内置全文搜索引擎
轻量、快速、免部署,适合绝大多数中小项目。
附:最小可用示例
1 2 3
| CREATE VIRTUAL TABLE docs USING fts5(content); INSERT INTO docs VALUES ('SQLite FTS 很好用'); SELECT * FROM docs WHERE docs MATCH 'FTS';
|
如果你愿意,下一步我可以帮你再补一节:
- ✅ Rust(rusqlite)调用 FTS 示例
- ✅ FTS 搜索结果高亮
- ✅ FTS 排序 / 权重(bm25)
- ✅ 数据同步触发器写法
你直接说:“给我 Rust 版” 或 “补高亮和排序” 就行。