ModuForge Search - SQLite 搜索引擎
基于 SQLite + FTS5 的高性能树形文档搜索引擎。
✨ 特性
- ✅ 全文搜索 - SQLite FTS5 虚拟表,支持中文分词
- ✅ 树形查询 - 原生
WITH RECURSIVE递归查询 - ✅ 结构化查询 - 完整 SQL 支持,灵活组合条件
- ✅ 增量更新 - 事务级增量索引更新
- ✅ 高并发 - WAL 模式,读写分离
- ✅ 零配置 - 内嵌 SQLite,无需额外依赖
🚀 快速开始
基本使用
use ;
use Arc;
async
复杂查询
let results = service.search.await?;
与 State 集成
use create_search_index_plugin;
use ;
let search_plugin = create_search_index_plugin?;
let state = create.await?;
// 自动索引更新
let mut tr = state.tr;
tr.add_node?;
let result = state.apply.await?; // 索引自动同步
📊 查询类型
1. 全文搜索
// FTS5 全文索引
SearchQuery
2. 树形递归
// 获取节点及所有子孙节点
SearchQuery
3. 精确过滤
SearchQuery
4. 属性查询
// JSON 属性查询
SearchQuery
5. 范围查询
SearchQuery
6. 路径前缀
// 查询路径以 "/root/section" 开头的所有节点
SearchQuery
🏗️ 架构
┌─────────────────────────────────────────┐
│ SearchService │ ← 高层查询接口
│ (search_text, query_descendants, ...) │
└──────────────────┬──────────────────────┘
│
┌──────────────────▼──────────────────────┐
│ SqliteBackend │ ← SQLite 后端
│ ┌─────────────────────────────────┐ │
│ │ nodes (主表) │ │
│ │ - 结构化数据 │ │
│ │ - B-tree 索引 │ │
│ └─────────────────────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ nodes_fts (FTS5) │ │
│ │ - 全文索引 │ │
│ │ - 触发器自动同步 │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────┘
🎯 性能特点
| 操作 | 性能 | 说明 |
|---|---|---|
| 全文搜索 | ~5-10ms | FTS5 倒排索引 |
| 树形递归 | ~3ms | WITH RECURSIVE |
| 精确过滤 | ~2ms | B-tree 索引 |
| 批量插入 | ~50K/s | WAL 模式 |
| 索引大小 | 1.2x | 原始数据的 1.2 倍 |
🔧 配置选项
创建选项
// 1. 指定目录
new_in_dir?
// 2. 系统临时目录
new_in_system_temp?
// 3. 自定义临时根目录
new_in_temp_root?
查询选项
🧪 测试
# 运行测试
# 运行示例
# 基准测试
📝 迁移指南
从 Tantivy 迁移到 SQLite:
- 更新依赖 - 已自动完成
- 更新代码 -
TantivyBackend→SqliteBackend - 更新插件 -
create_tantivy_index_plugin→create_search_index_plugin - 查询 API 兼容 -
SearchQuery保持不变
🎁 优势对比
| 特性 | Tantivy | SQLite | 说明 |
|---|---|---|---|
| 全文搜索 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | SQLite FTS5 足够强大 |
| 树形查询 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 原生 WITH RECURSIVE |
| SQL 查询 | ❌ | ⭐⭐⭐⭐⭐ | 完整 SQL 支持 |
| 事务 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ACID 保证 |
| 维护成本 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 熟悉的 SQL |
| 写入性能 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | WAL 高并发 |