本文来自公众号 猩猩程序员 欢迎关注
如果你正在寻找一个替代 Elasticsearch 或 Apache Solr 的搜索引擎,那么你应该了解 Quickwit------一个建立在 Tantivy 之上的分布式搜索引擎。
Tantivy 是一个高效的全文搜索库,深受 Apache Lucene 的启发。与 Elasticsearch 或 Solr 不同,Tantivy 并不是一个即用型的搜索引擎服务器,而是一个可以用于构建搜索引擎的 Rust crate。这意味着 Tantivy 提供了一个构建自定义搜索引擎的框架,而不是一个完全现成的解决方案。
Tantivy 与 Lucene 的相似之处
Tantivy 的设计灵感来源于 Lucene,但它更侧重于为开发者提供高效、灵活的构建模块。与 Lucene 不同,Tantivy 更适合那些需要快速实现特定搜索功能并进行高度定制的用户。它提供了必要的核心功能,例如倒排索引、查询解析器等,但需要开发者自己去实现如何部署和维护搜索服务。
性能基准测试
Tantivy 提供了一个基准测试,可以帮助用户理解其在不同查询类型和数据集合上的性能。尽管如此,性能表现会受到查询类型、数据量和硬件环境的影响。因此,用户在使用时可能会经历不同的性能结果。
主要功能
Tantivy 拥有许多强大的功能,使其成为构建搜索引擎的理想选择:
- 全文搜索支持:可以进行复杂的全文检索,包括布尔查询和短语查询等。
- 配置化的分词器:支持多达 17 种拉丁语语言的词干提取,还支持中文、日文和韩文的分词器(如 tantivy-jieba、lindera 等)。
- 快速响应时间:Tantivy 的启动时间非常短,通常小于 10 毫秒,非常适合用作命令行工具。
- BM25 评分:与 Lucene 相同,支持基于 BM25 算法进行文档评分。
- 增量索引:可以支持对现有索引进行增量更新,避免完全重建索引。
- 多线程索引:支持多线程并行索引,能在短时间内完成大规模文档的索引(例如,英文维基百科的索引只需要不到 3 分钟)。
- Mmap 目录:支持内存映射目录,提升索引和查询性能。
- 高效的压缩算法:支持 LZ4、Zstd 等压缩方式,帮助减少存储空间和提高数据传输效率。
- 范围查询和分面搜索:能够进行多维度的数据查询分析,如日期范围查询或地理位置查询。
- 文档存储和字段类型支持:支持文本、整型、浮动点数、布尔值等多种字段类型,同时还可以进行文档压缩存储。
非功能特性
虽然 Tantivy 是一个强大的全文搜索库,但它不提供分布式搜索的功能。如果你需要这个功能,可以考虑使用 Quickwit,它是一个基于 Tantivy 的分布式搜索引擎。
使用场景
Tantivy 的主要用途是构建高效的搜索引擎,尤其适用于以下场景:
- 构建自定义的全文搜索引擎,支持各种查询方式。
- 实现增量索引和快速文档搜索,满足高效的数据检索需求。
- 需要支持快速响应时间和大规模数据的索引处理。
一些著名的公司已经在他们的应用中使用了 Tantivy,包括 Etsy、ParadeDB 和 Nuclia 等。
如何快速上手
Tantivy 支持稳定版本的 Rust,并兼容 Linux、macOS 和 Windows 系统。你可以通过以下步骤快速开始使用:
- 安装 Rust:确保你已经安装了最新版本的 Rust。
- 安装 Tantivy :通过
cargo
安装并构建 Tantivy。 - 创建索引和查询 :使用
tantivy-cli
创建一个简单的搜索引擎,它带有完整的命令行接口,帮助你快速上手。你可以通过命令行工具或小型 REST API 进行索引和查询操作。
详细的教程和示例可以帮助你在几分钟内启动一个 Wikipedia 搜索引擎。
如何支持 Tantivy
Tantivy 是一个开源项目,任何人都可以参与支持它:
- 使用 Tantivy 并分享你的经验:你可以通过 Discord 或电子邮件与开发者沟通,分享你的使用体验。
- 报告问题:如果你遇到任何问题,欢迎向项目提交 bug 报告。
- 贡献代码或文档:通过 GitHub 提交 Pull Request,帮助改进代码或文档。
FAQ
-
Tantivy 支持哪些编程语言?
- 除了 Rust,Tantivy 还支持 Python(tantivy-py)和 Ruby(tantiny)。这些绑定在 GitHub 上可以找到,但更新频率可能不如官方支持的 Rust 版本。
-
Tantivy 比 Lucene 快多少?
- 根据基准测试,Tantivy 在搜索延迟方面大约比 Lucene 快两倍。
-
如何编辑文档?
- 由于 Tantivy 使用的是不可变的数据结构,因此文档编辑时需要先删除原文档,然后重新索引。
-
文档何时可以被搜索到?
- 文档在提交给
IndexWriter
并调用提交后变为可搜索。现有的IndexReader
需要重新加载才能反映这些变更。
- 文档在提交给
结语
Tantivy 是一个功能强大且高效的全文搜索引擎库,适合那些需要构建定制化、高性能搜索引擎的开发者。无论是进行全文检索,还是支持复杂的查询和多维度分析,Tantivy 都能提供良好的支持。如果你正在寻找一个快速、灵活的搜索解决方案,Tantivy 绝对值得尝试。
本文来自公众号 猩猩程序员 欢迎关注