SQLite FTS(全文检索)使用总结

好,我给你整理一份可以直接当博客用的 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';

等价于:
👉 同时包含 SQLiteFTS


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 的情况:

  • 搜索框
  • 文档系统 / 知识库
  • 日志 / 说明 / 描述字段
  • 数据量 ≥ 几万条

不适合:

  • 精确 ID 查询
  • 数据量极小
  • 完全不需要模糊搜索

九、使用注意事项

  • 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 版”“补高亮和排序” 就行。