为什么需要 Tantivy?
Elasticsearch 统治全文搜索领域已超过十年,但它基于 JVM 的架构在内存占用和启动速度上一直为人诟病。Tantivy 定位为"Lucene 的 Rust 替代品",以极致性能和低资源消耗为核心卖点。
Tantivy 不是 Elasticsearch 的替代品,而是 Lucene 的替代品。如果你需要一个轻量级的嵌入式搜索引擎,Tantivy 是当前最优解。
核心概念
与 Lucene 的类比
| 概念 | Lucene | Tantivy | 说明 |
|---|---|---|---|
| 索引目录 | Directory | Directory | 存储索引文件的抽象 |
| 索引写入 | IndexWriter | IndexWriter | 写入文档并构建索引 |
| 索引读取 | IndexReader | IndexReader | 读取已提交的索引 |
| 搜索器 | IndexSearcher | Searcher | 执行搜索查询 |
| 分析器 | Analyzer | TextAnalyzer | 文本分词和标准化 |
快速上手
索引构建
use tantivy::schema::*;
use tantivy::{doc, Index, IndexWriter};
fn main() -> tantivy::Result<()> {
// 定义 Schema
let mut schema_builder = Schema::builder();
let title = schema_builder.add_text_field("title", TEXT | STORED);
let body = schema_builder.add_text_field("body", TEXT);
let schema = schema_builder.build();
// 创建索引
let index = Index::create_in_ram(schema.clone());
let mut writer: IndexWriter = index.writer(50_000_000)?;
// 添加文档
writer.add_document(doc!(
title => "Rust 异步编程指南",
body => "深入理解 Rust 的 async/await 机制..."
))?;
writer.add_document(doc!(
title => "Tantivy 全文搜索引擎",
body => "Tantivy 是一个用 Rust 编写的高性能搜索引擎..."
))?;
writer.commit()?;
Ok(())
}
搜索查询
use tantivy::collector::TopDocs;
use tantivy::query::QueryParser;
let reader = index.reader()?;
let searcher = reader.searcher();
let query_parser = QueryParser::for_index(&index, vec![title, body]);
let query = query_parser.parse_query("Rust 搜索引擎")?;
let top_docs = searcher.search(&query, &TopDocs::with_limit(10))?;
for (score, doc_address) in top_docs {
let doc = searcher.doc(doc_address)?;
let found_title = doc.get_first(title).unwrap().as_str().unwrap();
println!("Score: {:.4} | Title: {}", score, found_title);
}
v0.24 新特性
Tantivy v0.24 于 2025 年 6 月发布,主要更新:
- 基数聚合(Cardinality Aggregation):支持 HyperLogLog++ 算法的基数估算,用于统计去重后的文档数量。
- 列式存储优化:对
Columnar字段类型的压缩和读取性能提升。 - 索引合并加速:多线程合并策略优化,大索引的合并时间减少 40%。
Tantivy vs Lucene 性能对比
| 指标 | Tantivy | Lucene |
|---|---|---|
| 索引速度(100 万文档) | 12s | 28s |
| 内存占用(空载) | 15MB | 120MB |
| 搜索延迟(P99) | 3ms | 8ms |
| 二进制体积 | 5MB | 35MB+ |
总结
Tantivy 代表了"Rust 重写一切"趋势在搜索领域的落地。对于嵌入式搜索、边缘计算场景或资源受限环境,Tantivy 是最佳选择;而对于需要分布式集群的全文搜索场景,Quickwit(基于 Tantivy 的分布式搜索引擎)是值得关注的项目。
评论 (0)