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 绝对值得尝试。

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

相关推荐
我叫黑大帅4 分钟前
前端单词查询功能是怎么搞出来的?😂
前端·javascript
北京_宏哥8 分钟前
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-33-JavaScript的调用执行-上篇 (详细教程)
java·前端·javascript
张志鹏PHP全栈8 分钟前
Vue3第十三天,Vue3种如何自定义hook
前端·vue.js
Dignity_呱10 分钟前
为什么一定要有微任务,直接一个宏任务不行吗
前端·javascript·面试
Cache技术分享16 分钟前
156. Java Lambda 表达式 - 从 Lambda 到方法引用:深入理解 Java 的未绑定实例方法调用
前端·后端
teeeeeeemo21 分钟前
JS实现数组扁平化
开发语言·前端·javascript·笔记·算法
原则猫21 分钟前
waterfall 妙用
前端
Mintopia22 分钟前
Next.js 组件库搭建指南:Shadcn UI 与 Radix UI 的优雅实践
前端·javascript·next.js
e黑子23 分钟前
GPT 让我效率提升 10 倍,但也差点毁了我的职业生涯
前端·程序员
一滩25 分钟前
使用LLM 实现一个可编辑PPT Agent
前端