Tantivy使用Rust 开发的全文搜索引擎库

一、概述

Tantivy是一个全文搜索引擎库,灵感来自Apache Lucene,用Rust编写。
在这里插入图片描述

如果你正在寻找Elasticsearch或Apache Solr的替代品,请查看我们基于Tantivy构建的分布式搜索引擎Quiuckwit。

Tantivy更接近Apache Lucene,而不是Elasticsearch或Apache Solr,因为它不是现成的搜索引擎服务器,而是一个可用于构建此类搜索引擎的库。

Tantivy的性能非常棒,请看下图:
在这里插入图片描述

二、特征

  • 全文搜索
  • 可配置的标记器(可用于 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。

三、Tanvity的小示例


use tantivy::collector::TopDocs;
use tantivy::query::QueryParser;
use tantivy::schema::*;
use tantivy::{doc, Index, IndexWriter, ReloadPolicy};
use tempfile::TempDir;fn main() -> tantivy::Result<()> {let index_path = TempDir::new()?;let mut schema_builder = Schema::builder();schema_builder.add_text_field("title", TEXT | STORED);schema_builder.add_text_field("body", TEXT);let schema = schema_builder.build();let index = Index::create_in_dir(&index_path, schema.clone())?;let mut index_writer: IndexWriter = index.writer(50_000_000)?;let title = schema.get_field("title").unwrap();let body = schema.get_field("body").unwrap();let mut old_man_doc = TantivyDocument::default();old_man_doc.add_text(title, "The Old Man and the Sea");old_man_doc.add_text(body,"He was an old man who fished alone in a skiff in the Gulf Stream and he had gone \eighty-four days now without taking a fish.",);index_writer.add_document(old_man_doc)?;index_writer.add_document(doc!(title => "Of Mice and Men",body => "A few miles south of Soledad, the Salinas River drops in close to the hillside \bank and runs deep and green. The water is warm too, for it has slipped twinkling \over the yellow sands in the sunlight before reaching the narrow pool. On one \side of the river the golden foothill slopes curve up to the strong and rocky \Gabilan Mountains, but on the valley side the water is lined with trees—willows \fresh and green with every spring, carrying in their lower leaf junctures the \debris of the winter’s flooding; and sycamores with mottled, white, recumbent \limbs and branches that arch over the pool"))?;index_writer.add_document(doc!(title => "Frankenstein",title => "The Modern Prometheus",body => "You will rejoice to hear that no disaster has accompanied the commencement of an \enterprise which you have regarded with such evil forebodings.  I arrived here \yesterday, and my first task is to assure my dear sister of my welfare and \increasing confidence in the success of my undertaking."))?;index_writer.commit()?;let reader = index.reader_builder().reload_policy(ReloadPolicy::OnCommitWithDelay).try_into()?;let searcher = reader.searcher();let query_parser = QueryParser::for_index(&index, vec![title, body]);let query = query_parser.parse_query("sea whale")?;let top_docs = searcher.search(&query, &TopDocs::with_limit(10))?;for (_score, doc_address) in top_docs {let retrieved_doc: TantivyDocument = searcher.doc(doc_address)?;println!("{}", retrieved_doc.to_json(&schema));}let query = query_parser.parse_query("title:sea^20 body:whale^70")?;let (_score, doc_address) = searcher.search(&query, &TopDocs::with_limit(1))?.into_iter().next().unwrap();let explanation = query.explain(&searcher, doc_address)?;println!("{}", explanation.to_pretty_json());Ok(())
}

Github: https://github.com/quickwit-oss/tantivy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/390423.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

K8s集群部署

操作系统初始化配置 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X#关闭selinux setenforce 0 sed -i s/enforcing/disabled/ /etc/selinux/config…

当Vercel的域名验证规则碰上JPDirect这种不配合的同学把我的脑袋擦出了火星子

文章目录 前言问题简单说明Vercel主要功能和特点 JPDirectNameServers解决方案 总结 前言 处理域名转移这件事已经过去好几天&#xff0c;终于抽出点时间来总结一下&#xff0c;解决这件事大概花了2周多时间&#xff0c;因为时差的原因导致沟通缓慢&#xff0c;今天准备长话短…

Python 爬虫项目实战(二):爬取微博热搜榜

前言 网络爬虫&#xff08;Web Crawler&#xff09;&#xff0c;也称为网页蜘蛛&#xff08;Web Spider&#xff09;或网页机器人&#xff08;Web Bot&#xff09;&#xff0c;是一种按照既定规则自动浏览网络并提取信息的程序。爬虫的主要用途包括数据采集、网络索引、内容抓…

L-H、BytePlus 和 INOVAI在东京成功举办Web3 AI未来峰会

7月30日&#xff0c;L-H (Legendary Humanity)、字节跳动旗下BytePlus 和日本知名Web3孵化器 INOVAI 在东京联合举办Web3&AI未来峰会&#xff0c;水滴资本等行业重磅机构共同参与此次峰会&#xff0c;探讨AI与 Web3的融合性未来。 在此次峰会上&#xff0c;L-H (Legendary…

分布式领域扩展点设计稿

分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀&#xff0c;愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考&#xff0c;决定将 单点领域扩展点&#xff08;savior-ext&#xff09; 从…

特定领域软件架构-系统架构师(三十七)

软件架构复用 有三个阶段&#xff1a; 首先构造/获取可复用的软件资产其次管理这些资产&#xff08;构件库&#xff09;最后针对这些需求&#xff0c;从这些资产中选择可复用的部分&#xff0c;满足需求应用系统。 特定领域软件架构 DSSA&#xff08;Domain Specific softwa…

【C++】入门基础知识

河流之所以能够到达目的地&#xff0c;是因为它懂得怎样避开障碍。&#x1f493;&#x1f493;&#x1f493; ✨说在前面 亲爱的读者们大家好&#xff01;&#x1f496;&#x1f496;&#x1f496;&#xff0c;我们又见面了&#xff0c;上一篇目我们已经完结了初阶数据结构部分…

php反序列化靶机serial实战

扫描ip,找到靶机ip后进入 他说这是cookie的测试网页&#xff0c;我们抓个包&#xff0c;得到cookie值 base64解码 扫描一下靶机ip的目录 发现http://192.168.88.153/backup/&#xff0c;访问 下载一下发现是他的网页源码 通过代码审计&#xff0c;发现 通过代码审计得知&…

JAVA进阶学习13

文章目录 2.2.3 综合输入和输出方法进行文件拷贝2.2.4 字节流读取时乱码的问题 2.3 字符流的方法概述2.3.1 FileReader方法2.3.2 FileWriter方法2.3.3 小结 三、高级IO流3.1 缓冲流3.1.1 字节缓冲流3.1.2 字符缓冲流 3.2 转换流3.3 序列化流3.3.1 序列化流3.3.2 反序列化流 3.4…

极简聊天室-websocket版

再写一个极简聊天室的websocket版&#xff0c;在本例中&#xff0c;websocket仅用于服务器向客户端传输信息&#xff0c;客户端向服务器发送信息是传统的http post方式&#xff0c;用axios来实现的&#xff0c;当然websocket本身是支持双向通信&#xff0c;主要是为了方便跟前面…

【leetcode详解】正方形中的最多点数【中等】(C++思路精析)

思路精析&#xff1a; 自定义结构体解读&#xff1a; 一个点是否在题给正方形中&#xff0c;只取决于其横纵坐标的最大值&#xff0c;记为dis 沟通二位数组points和字符串s的桥梁&#xff0c;就是这个点的序号&#xff0c;记为idx 由此自定义结构体&#xff0c;储存dis 和i…

基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析

转载&#xff1a;基于 KubeSphere 的 Kubernetes 生产环境部署架构设计及成本分析 前言 导图 1. 简介 1.1 架构概要说明 今天分享一个实际小规模生产环境部署架构设计的案例&#xff0c;该架构设计概要说明如下&#xff1a; 本架构设计适用于中小规模(<50)的 Kubernetes …

C#对象和类型

属性、方法、字段 字段和属性的区别 在C#中&#xff0c;字段&#xff08;fields&#xff09;和属性&#xff08;properties&#xff09;都是类的成员&#xff0c;它们提供了类存储数据的方式&#xff0c;但它们在用途和功能上有着明显的区别。 字段 字段通常用来存储类…

Gstreamer配合srs服务器实现RTMP直播和WebRtc直播

前言 上一篇文章,实现了配合腾讯云直播的推流,但是需要花钱,于是就在思考能不能搞一个局域网内,免费的RTMP直播呢? 最终发现了可以使用srs服务器。如果成功了,以后也可以使用webrtc的直播推流。 以下是实现效果: 一、搭建srs服务器: 参考:ubuntu环境下搭建SRS服务器(…

MyBatis全方位指南:从注解到XML文件的数据库操作

目录 一.什么是MyBatis 入门程序初体验 二.MyBatis基本操作CRUD ▐ 增(Insert) 返回主键 ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) 起别名 结果映射 开启驼峰命名(推荐) 三.MyBatis XML配置文件 ▐ 增(Insert) ▐ 删(Delete) ▐ 改(Update) ▐ 查(Select) …

Linux:Xshell相关配置及前期准备

一、Linux的环境安装 1、裸机安装或者是双系统 2、虚拟机的安装 3、云服务器&#xff08;推荐&#xff09;——>安装简单&#xff0c;维护成本低&#xff0c;学习效果好&#xff0c;仿真性高&#xff08;可多人一起用一个云服务器&#xff09; 1.1 购买云服务器 使用云服…

基于环形拓扑的多目标粒子群优化算法(MO_Ring_PSO_SCD)求解无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节&#xff0c;无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上&#xff0c;计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

【传知代码】Flan-T5 使用指南(论文复现)

当今&#xff0c;自然语言处理技术正在以前所未有的速度和精度发展。在这个领域中&#xff0c;Flan-T5作为一种新兴的预训练语言模型&#xff0c;正吸引着广泛的关注和应用。Flan-T5不仅仅是一个强大的文本生成工具&#xff0c;它还能通过提供高效的语义理解和多任务学习能力&a…

springboot配置多个数据源

实际业务中&#xff1b;在一个项目里面读取多个数据库的数据来进行展示&#xff0c;例如读取mysql&#xff0c;pgsql&#xff0c;oracle的不同数据库&#xff0c;springboto对同时配置多个数据源是支持的。 使用springbootmybatis的框架来进行演示&#xff0c; 在配置文件中配…

美国失业率大幅上升,增加九月份降息利率的可能性

令人失望的是&#xff0c;美国7月份经济增加了11.4万个工作岗位&#xff0c;低于预期的17.5万个和6月的17.9万个。平均小时工资持续下降&#xff0c;但失业率升至4.3%。美元继续走低&#xff0c;美国国债也在下跌&#xff0c;而黄金则获得了提振。 7月份的非农业支付数据令人失…