0.17.0 |
|
---|---|
0.17.0-202205251639 |
|
#29 in #信息检索
3.5MB
60K SLoC
Tantivy 是一个用 Rust 编写的 全文搜索引擎库。
它在某些方面比 Apache Lucene 更接近,而不是 Elasticsearch 或 Apache Solr,因为它不是一个现成的搜索引擎服务器,而是一个可以用来构建此类搜索引擎的包。
实际上,Tantivy 的设计深受 Lucene 启发。
如果您在寻找 Elasticsearch 或 Apache Solr 的替代品,请查看我们的基于 Tantivy 构建的搜索引擎 Quickwit。
基准测试
以下 基准测试 分解了不同类型查询/集合的性能。
根据查询的性质及其负载,您的表现可能会有所不同。
功能
- 全文搜索
- 可配置的分词器(提供 17 种拉丁语言的词干提取,对中文(tantivy-jieba 和 cang-jie)和日语(lindera、Vaporetto、tantivy-tokenizer-tiny-segmenter)以及韩语(lindera + lindera-ko-dic-builder)的支持)
- 快速(查看 🐎 ✨ 基准测试 ✨ 🐎)
- 极短的启动时间(<10ms),非常适合命令行工具
- BM25 分数(与 Lucene 相同)
- 自然查询语言(例如
(michael AND jackson) OR "king of pop"
) - 短语查询搜索(例如
"michael jackson"
) - 增量索引
- 多线程索引(在我的台式机上,将英文维基百科索引到索引只需要 <3 分钟)
- Mmap 目录
- 当平台/处理器包含 SSE2 指令集时,使用 SIMD 整数压缩
- 单值和多值 u64、i64 和 f64 快速字段(相当于 Lucene 中的 doc 值)
&[u8]
快速字段- 文本、i64、u64、f64、日期和层次分面字段
- LZ4 压缩文档存储
- 范围查询
- 分面搜索
- 可配置索引(可选词频和位置索引)
- JSON 字段
- 聚合收集器:范围桶、平均值和统计指标
- 带有删除的 LogMergePolicy
- 搜索器预热 API
- 带马的奶酪标志
非特性
分布式搜索不在 Tantivy 的范围内,但如果你正在寻找这个功能,请查看 Quickwit。
入门指南
Tantivy 适用于稳定版 Rust (>= 1.27) 且支持 Linux、macOS 和 Windows。
- Tantivy 的简单搜索示例
- tantivy-cli 和其教程 -
tantivy-cli
是一个实际的命令行界面,它使您能够轻松创建搜索引擎、索引文档并通过 CLI 或带有 REST API 的小型服务器进行搜索。它会在几分钟内引导您将维基百科搜索引擎部署上线。 - 最后发布版本的参考文档
我如何支持这个项目?
有许多方式可以支持这个项目。
- 使用 Tantivy 并在 Discord 或通过电子邮件([email protected])告诉我们您的体验
- 报告错误
- 撰写博客文章
- 通过提问或提交 PR 来帮助文档
- 贡献代码(您可以加入 我们的 Discord 服务器)
- 在您周围谈论 Tantivy
贡献代码
我们使用 GitHub Pull Request 工作流程:在打开 PR 时引用 GitHub 问题并/或包含一个全面的提交信息。
克隆和本地构建
Tantivy 在稳定版 Rust 上编译,但需要 Rust >= 1.27
。要检出并运行测试,您可以简单地运行
git clone https://github.com/quickwit-oss/tantivy.git
cd tantivy
cargo build
运行测试
由于 fail-rs
,某些测试仅使用 cargo test
不会运行。要彻底运行测试,请运行 ./run-tests.sh
。
调试
您可能会发现使用调试器逐步通过程序很有用。
失败的测试
请确保您在最近的 cargo test
或 cargo build
后没有运行 cargo clean
,以保证 target/
目录存在。使用此 bash 脚本来找到 Tantivy 的最新调试构建的名称,并在 rust-gdb
下运行它
find target/debug/ -maxdepth 1 -executable -type f -name "tantivy*" -printf '%TY-%Tm-%Td %TT %p\n' | sort -r | cut -d " " -f 3 | xargs -I RECENT_DBG_TANTIVY rust-gdb RECENT_DBG_TANTIVY
现在您已经进入 rust-gdb
,您可以在与您的源代码匹配的行和方法上设置断点,并使用通常传递给 cargo test
的标志运行调试可执行文件,如下所示
$gdb run --test-threads 1 --test $NAME_OF_TEST
示例
默认情况下,rustc
以调试模式编译 examples/
目录中的所有内容。这使得您很容易创建示例以重现错误
rust-gdb target/debug/examples/$EXAMPLE_NAME
$ gdb run
使用 Tantivy 的公司
常见问题解答
我能否在其他语言中使用 Tantivy?
- Python → tantivy-py
- Ruby → tantiny
您也可以在 GitHub 上找到其他绑定,但它们可能维护得较少。
Tantivy 的使用示例有哪些?
与 Lucene 相比,Tantivy 平均快多少?
- 根据我们的 搜索延迟基准,Tantivy 大约比 Lucene 快 2 倍。
依赖项
~12–26MB
~379K SLoC