37个版本 (21个重大变更)
0.22.0 | 2024年4月12日 |
---|---|
0.21.1 | 2023年10月26日 |
0.21.0 | 2023年9月1日 |
0.20.2 | 2023年6月12日 |
0.1.1 | 2016年8月14日 |
2 在 数据库实现 中排名
每月447,341次下载
在 105 个 仓库中使用 (73 直接使用)
4MB
86K SLoC
使用Rust编写的快速全文搜索引擎库
如果您正在寻找Elasticsearch或Apache Solr的替代品,请查看我们的分布式搜索引擎Quickwit,它建立在Tantivy之上。
Tantivy在本质上比Elasticsearch或Apache Solr更接近Apache Lucene,因为它不是一个现成的搜索引擎服务器,而是一个可以用来构建此类搜索引擎的crate。
实际上,Tantivy深受Lucene设计的启发。
基准测试
以下基准测试对不同类型的查询/集合的性能进行了分析。
您的里程数将根据查询的性质及其负载而有所不同。
有关基准测试的详细信息,请参阅此存储库。
特性
- 全文搜索
- 可配置的词法分析器(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目录
- 当平台/CPU包含SSE2指令集时,使用SIMD整数压缩
- 单值和多值u64、i64和f64快速字段(相当于Lucene中的doc值)
&[u8]
快速字段- 文本、i64、u64、f64、日期、ip、bool和分层分面字段
- 压缩文档存储(LZ4、Zstd、None)
- 范围查询
- 分面搜索
- 可配置索引(可选词频和位置索引)
- JSON字段
- 聚合收集器:直方图、范围桶、平均值和统计指标
- 带有删除的LogMergePolicy
- 搜索器预热API
- 带有马头的搞笑标志
非特性
分布式搜索不在Tantivy的范围内,但如果您正在寻找此功能,请查看Quickwit。
入门指南
Tantivy运行在稳定的Rust上,并支持Linux、macOS和Windows。
- Tantivy的简单搜索示例
- tantivy-cli及其教程 -
tantivy-cli
是一个真正的命令行界面,使您能够轻松创建搜索引擎、索引文档并通过CLI或带有REST API的小型服务器进行搜索。它引导您在几分钟内将维基百科搜索引擎设置好并运行。 - 最新发布版本的参考文档
我如何支持此项目?
有许多支持此项目的方法。
- 使用Tantivy并告诉我们您在Discord或通过电子邮件([email protected])的经历
- 报告错误
- 撰写博客文章
- 通过提问或提交PR来帮助文档
- 贡献代码(您可以在我们的Discord服务器加入我们)
- 在您周围谈论Tantivy
贡献代码
我们使用GitHub Pull Request工作流程:在打开PR时引用GitHub问题票和/或包含一个全面的提交信息。请随意更新CHANGELOG.md以包含您的贡献。
分词器
在为tantivy实现分词器时,请依赖于tantivy-tokenizer-api
crate。
克隆并本地构建
Tantivy在稳定的Rust上编译。要检查并运行测试,您可以简单地运行
git clone https://github.com/quickwit-oss/tantivy.git
cd tantivy
cargo test
使用Tantivy的公司
常见问题解答
我可以在其他语言中使用 Tantivy 吗?
- Python → tantivy-py
- Ruby → tantiny
您也可以在 GitHub 上找到其他绑定,但它们可能维护得较少。
Tantivy 的一些使用示例有哪些?
与 Lucene 相比,Tantivy 平均快多少倍?
- 根据我们的 搜索延迟基准,Tantivy 的速度大约是 Lucene 的 2 倍。
tantivy 支持增量索引吗?
- 是的。
我如何编辑文档?
- tantivy 中的数据是不可变的。要编辑文档,需要删除并重新索引该文档。
在索引过程中,我的文档何时可搜索?
- 在调用
IndexWriter
上的commit
后,文档将可搜索。现有的IndexReader
也需要重新加载以反映更改。最后,更改仅对新获取的Searcher
可见。
依赖关系
~17–30MB
~415K SLoC