2023-02-04 Elasticsearch 倒排索引的理解 Trie前缀树原理

2023/6/5 21:44:20

1 搜索引擎 引出倒排表的原理

全文搜索引擎 自然语言处理(NLP) 、爬虫、网页处理、大数据处理 如谷歌、百度、搜狗、必应等等
垂直搜索引擎 有明确搜索目的的搜索行为 如各大电商网站、OA、站内搜索、视频网站等
要求: 查询快 (高效的压缩算法 快速的编码和解码速度)查询准 (BM25 、TF-IDF)检索结果丰富(召回率)

面向海量数据,如何达到“搜索引擎”级别的查询效率?

索引 1-帮助快速检索 2-以数据结构为载体 3-以文件的形式落地

我们以mysql数据库为例
在这里插入图片描述
MySQL索引能解决大数据检索的问题吗?

1、索引往往字段很长,如果使用B+trees, 树可能很深,I0很可怕
2、索引可能会失效
3、精准度差

在这里插入图片描述
全文检索:索引系统通过扫描文章中的每一 个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统过就会根据事先创建的索引进行查找,并将查找的结果反馈给用户的检索方式。
在这里插入图片描述
倒排索引的核心原理:
在这里插入图片描述

2 倒排索引的数据结构

在这里插入图片描述

3 FOR压缩算法

在这里插入图片描述
拆分的规则 - 这个折中值是怎么确定的呢?

4 RBM 压缩算法

在这里插入图片描述

5 Trie前缀树原理

当我们利用搜索引擎时,只需输入部分字符,就可以得到我们想要的关键字。这种向部分键入的字符串建议可能的单词的功能便是自动补齐功能,广泛用于搜索引擎、IDE 等。那这种功能是怎样实现的呢?本文介绍的前缀树便是一种很好的解决方案。

前缀树,又称字典树。它是一棵 N 叉树。前缀树一般用于存储、查找字符串。

前缀树的每个节点代表一个字符,通常用一个属性 isEnd 来标注字符串的末尾,从根节点到 isEnd 为 true 的节点的路径便是一个字符串。

前缀树的一个重要的特性是,结点所有的后代都与该结点相关的字符串有着共同的前缀,这是前缀树名称的由来。

下面这个例子,存储了 apply、apple、apart、bee 和 bed 和app 6个单词的前缀树。
在这里插入图片描述
FSM(Finite State Machines)有限状态机:表示有限个状态(State)集合以及这些状态之间转移和动作的数学模型。其中一个状态被标记为开始状态,0个或更多的状态被标记为final状态。
在这里插入图片描述
有限个状态;同一时间只能处于同一个状态;不同状态可以互相转换;状态是无序的

FSA:有限状态接收机
确定性:在任何给定状态下,对于任何输入,最多只能遍历一个transition
非循环:不可能重复遍历同一个状态
Final唯一性:当且仅当有限状态机在输入序列的末尾处于"最终""状态时,才"接受"特定的输入序列

在这里插入图片描述

举例:ms msc 都不存在。
在这里插入图片描述
思考:wl 是否存在?但是词项字典不存在wl。

FST:有限状态转换机
FST最重要的功能是可以实现Key到Value的映射,相当于HashMap<Key,Value>。FST的查询速度比HashMap要慢一点,但FST的内存消耗要比HashMap少很多。FST在Lucene中被大量使用,例如:倒排索引的存储,同义词词典的存储,搜索关键字建议等。

查询快;极致压缩空间占用;
特性:
确定性:在任何给定状态下,对于任何输入,最多只能遍历一个transtion
非循环:不可能重复遍历同一个状态
transducer:转化器有相关的值(payload),final节点会输出一个值
比起前面的前缀树以及FSA,在存储的时候多了一个value值。

在这里插入图片描述
在这里插入图片描述
fst 构建

此时,再输入wl试试?尽管节点3是final节点,但是由于值对不上,所以不会搜索成功的。


http://www.jnnr.cn/a/273021.html

相关文章

图论(8)LCA

一、概念 给定一棵有根树&#xff0c;若节点z既是x的祖先&#xff0c;又是y的祖先&#xff0c;则称z是x和y的公共祖先。 在所有公共祖先中&#xff0c;深度最大的一个为最近公共祖先。 求最近公共祖先的方法有&#xff1a; &#xff08;1&#xff09;&#xff1a; 1.x向上走…

人工智能轨道交通行业周刊-第32期(2023.1.30-2.5)

本期关键词&#xff1a;智能装车系统、南昌地铁巡检机器人、中国铁道学会科学技术奖、AIGC报告、智慧城市 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交…

配置安全的linux-apache服务器(5)

实验简介 实验所属系列&#xff1a;Linux网络服务配置与安全 实验对象&#xff1a; 本科/专科信息安全专业、网络工程 相关课程及专业&#xff1a;系统安全配置、服务器配置、计算机网络 实验时数&#xff08;学分&#xff09;&#xff1a;2学时 实验类别&#xff1a;实践实验…

删除文件还有救吗?9个最好数据恢复软件你值得尝试

数据恢复软件是一种程序&#xff0c;可帮助从意外删除的存储设备中恢复数据。在这篇博文中&#xff0c;我们彻底研究并生成了适用于 Windows PC 的最佳数据恢复软件列表。我们推荐 奇客数据恢复 作为适用于 Windows 的最佳数据恢复软件。因为它带有不同的扫描模式和选项&#x…

axios中params和data的区别

在开发项目的过程中我们往往忽略了一点&#xff0c;请求接口的传参方式&#xff0c;习惯了post请求就用data,get请求就用params。 params是添加到url的请求字符串中的&#xff0c;用于get请求。服务器并不会读取http body里面的数据,这样我们传递的就是Params里的请求的参数了。…

面试官:Exception和Error有什么区别?

回答思路&#xff1a; 相同点和不同点 异常的分类 异常处理关键字 异常处理的原则 回答总结&#xff1a; 首先相同点是Exception和Error都继承了Throwable类&#xff0c;而不同的是Exception 和 Error 体现了不同异常情况的分类。可以说Error是天灾&#xff0c;出现了也恢复不…

C++基础(4) - 运算符

文章目录输入输出浅谈1、cout 进行 C 输出1.1 控制符 endl1.2 使用 cout 进行拼接2、cin 获取键盘输入常用运算符分类算术运算符1、除法&#xff08;/&#xff09;2、求模&#xff08;%&#xff09;3、自增和自减赋值运算符关系运算符逻辑运算符三元运算符位运算符1、原码、反码…

Java开发学习(四十二)----MyBatisPlus查询语句之条件查询

一、条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装&#xff0c;使用编程的形式完成查询条件的组合。 这个我们在前面都有见过&#xff0c;比如查询所有和分页查询的时候&#xff0c;都有看到过一个Wrapper类&#xff0c;这个类就是用来构建查询条件的&#xff0…

springboot,vue教务管理系统

开发工具&#xff1a;IDEA服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7前端技术&#xff1a;vue elementUI服务端技术&#xff1a;springbootmybatis本系统拥有三种角色&#xff1a;管理员、教师和学生&#xff0c;项目…

RL笔记:动态规划(1): 策略估计和策略提升

目录 0. 前言 (4.1)策略估计&#xff0c;Policy Evaluation(Prediction) Example 4.1 (python代码) Exercise 4.1 Exercise 4.2 Exercise 4.3 (4.2)Policy Improvement 0. 前言 Sutton-book第4章&#xff08;动态规划&#xff09;学习笔记。本文是关于其中4.1节&#xf…

fpga图像处理(sobel算子)

【声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 关于sobel算子,前面已经讲过计算方法了。一种是上下的sobel算子,一种是左右的sobel算子,两者都相当于prewitt算子的进一步拓展。当然,之前的实现方法都是基于python和opencv实现…

Cadence PCB仿真 使用 Allegro PCB SI 为电源网络分配电压并选择仿真的电源网络的方法图文教程

🏡《总目录》   🏡《分目录》 目录 1,概述2,分配电压3,选择仿真网络4,总结1,概述 进行电源分配网络PDN的仿真前,需要进行一些准备工作。首先需要为电源网络分配适合的电压,并选择需要进行PDN分析的网络。本文介绍其具体方法。 2,分配电压 第1步:执行Analyze→P…

TensorFlow Serving模型部署

7.7 TensorFlow Serving模型部署 学习目标 目标 无应用 应用TensorFlow Serving完成模型服务运行 7.7.1 TensorFlow Serving TensorFlow Serving是一种灵活的高性能服务系统&#xff0c;适用于机器学习模型&#xff0c;专为生产环境而设计。TensorFlow Serving可以轻松部署新…

OpenGL | OpenGL 绘制其他图形

一、绘制点GL_POINTSOpenGL默认绘制的点大小是1px&#xff0c;可以使用glPointSize()来改变点的大小&#xff0c;但是要注意&#xff1a;glPointSize()不能放在glBegin()和glEnd()之间&#xff0c;要放在glBegin()之前。1.代码void Draw() {glClearColor(1, 1, 1, 1.0f); //白…

大数据之HBase基础

文章目录前言一、HBase基础简介&#xff08;一&#xff09;基础介绍&#xff08;二&#xff09;应用场景&#xff08;三&#xff09;特点二、数据模型&#xff08;一&#xff09;行键&#xff08;row key&#xff09;&#xff08;二&#xff09;列&#xff08;三&#xff09;列…

(深度学习快速入门)第四章第三节:卷积层详解1

文章目录一&#xff1a;什么是卷积运算&#xff08;了解&#xff09;二&#xff1a;从全连接层到卷积层&#xff08;1&#xff09;解决空间不变性&#xff08;2&#xff09;解决参数爆炸-稀疏连接和权值共享三&#xff1a;CNN中的图像卷积卷积层&#xff1a;卷积层是CNN中的核心…

道路病害识别监测系统 CNN网络

道路病害识别监测系统通过CNN网络深度学习算法&#xff0c;道路病害识别监测对巡检车上实时监控道路影像数据进行分析&#xff0c;输出道路病害裂缝巡检报告并落图展示。在CNN出现之前&#xff0c;对于图像的处理一直都是一个很大的问题&#xff0c;一方面因为图像处理的数据量…

mybatis plus 更新时间 创建时间自动填充失效的情况和解决方案

问题描述&#xff1a; 调用mybatisplus的IService接口中的update(Wrapper updateWrapper)&#xff0c;update_time没有自动填充。 spuService.update(updateWrapper); 解决方案&#xff1a; 不使用update(wrapper xxx)方法&#xff0c;使用以下方法替代&#xff1a; 1.boole…

Traffic Signs Recognition with 95% Accuracy using CNNKeras

Traffic Signs Recognition 导读 本文采用CNN模型和Keras库 使用GTSRB数据集 构建模型可以分为四部分&#xff1a;1、先探索数据集 2、构建CNN模型 3、训练和验证模型 4、使用测试数据测试模型 保存模型并使用Python自带包tkinter实现GUI 一、数据集 下载完数据后&#xff0c;可…

使用redisson实现分布式锁

在微服务项目中使用redisson实现一个分布式锁 一、引入依赖 spring-boot版本2.3.12.RELEASE <dependencies><dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.6.5</version></dep…