Tantivy
Abstract
Tantivy 是一个用 Rust 编写的全文搜索引擎库,定位类似于 Java 生态中的 Apache Lucene——它不是一个开箱即用的搜索服务,而是一个供开发者嵌入到自己程序中的底层搜索库。
背景
在 Rust 生态出现之前,构建全文搜索能力的主要路径是:
- 嵌入 Lucene(Java):功能完善,但引入 JVM 依赖;
- 接入 Elasticsearch / Solr:部署运维复杂,对轻量服务来说过重;
- SQLite FTS:功能有限,对数据量大(百万条以上)或高并发场景可能不够理想。
Tantivy 的优势
Tantivy 的出现填补了 Rust / 原生程序中"嵌入式全文搜索"的空白。它以 Lucene 的设计为蓝本,同样基于倒排索引 + Segment 模型,但充分利用 Rust 的零成本抽象和内存安全特性,在性能和资源占用上都有明显优势。
核心特性
Tantivy 的核心特性包括:
- 倒排索引 + BM25 相关性评分(与 Lucene 一致);
- 支持多字段(text、i64、f64、date、bytes 等);
- 列式存储(Fast Field)加速数值过滤与聚合;
- 内置分词器,支持自定义 Tokenizer;
- 写入吞吐高,读写并发基于 Segment 不可变设计;
- 纯 Rust 实现,无 GC、无运行时依赖,易于静态链接。
Tantivy vs. Elasticsearch
Tantivy 是库,Elasticsearch 是服务。前者适合进程内嵌入,无网络开销,部署简单;后者适合多节点分布式场景。Quickwit 和 Meilisearch 等搜索引擎均以 Tantivy 作为底层索引引擎。