Tantivy:高效的 Rust 全文搜索引擎

本文来自公众号 猩猩程序员 欢迎关注

如果你正在寻找一个替代 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 系统。你可以通过以下步骤快速开始使用:

  1. 安装 Rust:确保你已经安装了最新版本的 Rust。
  2. 安装 Tantivy :通过 cargo 安装并构建 Tantivy。
  3. 创建索引和查询 :使用 tantivy-cli 创建一个简单的搜索引擎,它带有完整的命令行接口,帮助你快速上手。你可以通过命令行工具或小型 REST API 进行索引和查询操作。

详细的教程和示例可以帮助你在几分钟内启动一个 Wikipedia 搜索引擎。

如何支持 Tantivy

Tantivy 是一个开源项目,任何人都可以参与支持它:

  • 使用 Tantivy 并分享你的经验:你可以通过 Discord 或电子邮件与开发者沟通,分享你的使用体验。
  • 报告问题:如果你遇到任何问题,欢迎向项目提交 bug 报告。
  • 贡献代码或文档:通过 GitHub 提交 Pull Request,帮助改进代码或文档。

FAQ

  1. Tantivy 支持哪些编程语言?

    • 除了 Rust,Tantivy 还支持 Python(tantivy-py)和 Ruby(tantiny)。这些绑定在 GitHub 上可以找到,但更新频率可能不如官方支持的 Rust 版本。
  2. Tantivy 比 Lucene 快多少?

    • 根据基准测试,Tantivy 在搜索延迟方面大约比 Lucene 快两倍。
  3. 如何编辑文档?

    • 由于 Tantivy 使用的是不可变的数据结构,因此文档编辑时需要先删除原文档,然后重新索引。
  4. 文档何时可以被搜索到?

    • 文档在提交给 IndexWriter 并调用提交后变为可搜索。现有的 IndexReader 需要重新加载才能反映这些变更。

结语

Tantivy 是一个功能强大且高效的全文搜索引擎库,适合那些需要构建定制化、高性能搜索引擎的开发者。无论是进行全文检索,还是支持复杂的查询和多维度分析,Tantivy 都能提供良好的支持。如果你正在寻找一个快速、灵活的搜索解决方案,Tantivy 绝对值得尝试。

本文来自公众号 猩猩程序员 欢迎关注

相关推荐
i听风逝夜25 分钟前
Web 3D地球实时统计访问来源
前端·后端
iMonster29 分钟前
React 组件的组合模式之道 (Composition Pattern)
前端
呐呐呐呐呢37 分钟前
antd渐变色边框按钮
前端
元直数字电路验证1 小时前
Jakarta EE Web 聊天室技术梳理
前端
wadesir1 小时前
Nginx配置文件CPU优化(从零开始提升Web服务器性能)
服务器·前端·nginx
牧码岛1 小时前
Web前端之canvas实现图片融合与清晰度介绍、合并
前端·javascript·css·html·web·canvas·web前端
灵犀坠1 小时前
前端面试八股复习心得
开发语言·前端·javascript
9***Y481 小时前
前端动画性能优化
前端
网络点点滴1 小时前
Vue3嵌套路由
前端·javascript·vue.js
牧码岛1 小时前
Web前端之Vue+Element打印时输入值没有及时更新dom的问题
前端·javascript·html·web·web前端