es倒排索引深入解读

news2024/11/23 8:04:13

文章目录

    • 一. Lucene
    • 二.倒排索引算法
      • 2.1 Posting List压缩算法
        • 2.1.1 FOR
        • 2.1.2 RoaringBitmap压缩
      • 2.3 FST压缩算法
        • 2.3.1 trie前缀树原理
        • 2.3.2 FST构建过程
          • NFA
          • DFA
          • FSM
          • FSA
          • FST:有限状态转换机构建原理
          • FST在lucene中实现原理


1.什么是搜索引擎?
全文搜索引擎: 自然语言处理(NLP)、爬虫、网页处理大数据处理如谷歌、百度、搜狗、必应等等
垂直搜索引擎: 有明确搜索目的的搜索行为各大电商网站、OA、站内搜索、视频网站等

2.搜索引擎应具备哪些要求?

  • 查询结果快: 高效的压缩算法,快速的编码和解码速度
  • 结果准确度: es7.0+ 使用BM25评分算法,es7.0-使用TF-IDF评分算法
  • 检索结果丰富: 召回率

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

  • 索引: 帮助快速检索;以数据结构为载体;以文件的形式落地

4. MySQL innodb索引能解决大数据检索的问题吗?

  • 索引可能会失效
  • 检索的是文本,索引字段可能很长,树深增加,io次数增多
  • 精准度差
    在这里插入图片描述

一. Lucene

Lucene是一个成熟的全文检索库,由Java语言编写,具有高性能、可伸缩的特点,并且开源、 免费。 Lucene是一个IR库(Information Retrieval lib 后来才由Shay Banon在其基础上开发了Elasticsearch

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


二.倒排索引算法

倒排表的压缩算法
FOR: Frame Of Reference
RBM:RoaringBitmap

词项索引的检索原理
FST: Finit state Transducers

2.1 Posting List压缩算法

2.1.1 FOR

FOR: 针对稠密数组
在这里插入图片描述
在这里插入图片描述

2.1.2 RoaringBitmap压缩

RBM: 针对稀疏数组
在这里插入图片描述

在这里插入图片描述

2.3 FST压缩算法

2.3.1 trie前缀树原理

什么是trie树?

在这里插入图片描述

为什么要按照term字典序思想处理(但es的索引压缩不是trie)? 为了生成最小化的FST数据结构,复用相同字符节约空间

2.3.2 FST构建过程

NFA

NFA详情

Nondeteministic Finite Automaton,非确定自动状态机
A 是一个五元组 A = (Σ, S, s0, δ, F):
字母表 Σ (ϵ !∈ Σ)
有穷的状态集合 S
唯一的初始状态 s0 ∈ S
状态转移函数 δ
δ : S × (Σ ∪ {ϵ}) → 2S
接受状态集合 F ⊆ S
A 定义了一种语言 L(A): 它能接受的所有字符串构成的集合

在这里插入图片描述
约定:所有没有对应出边的字符默认指向一个不存在的 “空状态” ∅

DFA

NFA详情

Deterministic Finite Automaton,确定性有穷自动机
A 是一个五元组 A = (Σ, S, s0, δ, F):
字母表 Σ (ϵ !∈ Σ)
有穷的状态集合 S
唯一的初始状态 s0 ∈ S
状态转移函数 δ
δ : S × Σ → S
接受状态集合 F ⊆ S
在这里插入图片描述
约定: 所有没有对应出边的字符默认指向一个不存在的 “死状态”

FSM

有限个状态
同一时间只能处于同一个状态不同状态可以互相转换
状态是无序的

FSA

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

FST:有限状态转换机构建原理

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

在这里插入图片描述
在这里插入图片描述

FST在lucene中实现原理

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Full authentication is required to access this resource解决办法

我们在使用postman调接口时候&#xff0c;有的时候需要权限才可以访问&#xff0c;否则可能会报下面这个错误 {"timestamp": xxxxxx,"status": 401,"error": "Unauthorized","message": "Full authentication is requ…

Matlab信号处理1:模拟去除信号噪声

由于工作内容涉及信号系统、信号处理相关知识&#xff0c;本人本硕均为计算机相关专业&#xff0c;专业、研究方向均未涉及信号相关知识&#xff0c;因此需进行系统地学习。之前已将《信号与系统》快速过了一遍&#xff0c;但感觉较抽象且理解较浅显。在此系统地学习如何使用Ma…

PTA L1-011 A-B C++解法

我的答案 #include<iostream> #include <string> using namespace std;int main() {//先用数组去存储输入的A和B&#xff0c;然后遍历数组A&#xff0c;B&#xff0c;相同的字母去除&#xff0c;不同的字母留下&#xff0c;最后输出string A, B;getline(cin, A);g…

Nomad 系列-安装

系列文章 Nomad 系列文章 Nomad 简介 开新坑&#xff01;近期算是把自己的家庭实验室环境初步搞好了&#xff0c;终于可以开始进入正题研究了。 首先开始的是 HashiCorp Nomad 系列&#xff0c;欢迎阅读。 关于 Nomad 的简介&#xff0c;之前在 大规模 IoT 边缘容器集群管…

java IO流(二) 字符流 缓冲流 原始流与缓冲流性能分析

字符流 前面学习的字节流虽然可以读取文件中的字节数据&#xff0c;但是如果文件中有中文&#xff0c;使用字节流来读取&#xff0c;就有可能读到半个汉字的情况&#xff0c;这样会导致乱码。虽然使用读取全部字节的方法不会出现乱码&#xff0c;但是如果文件过大又不太合适。…

递归入门,例题详解,汉诺塔问题,全排列问题,整数划分问题,两数相加

问题一&#xff1a;阶乘 对于阶乘n!&#xff0c;也就是从1一直乘到n&#xff0c;我们可以很简单的使用一个for循环来解决这个问题&#xff0c;但是如果使用递归的思路&#xff0c;那么我们需要思考如果将当前的问题分解为规模更小的问题&#xff0c;对于n的阶乘&#xff0c;我…

论文解读 | KPConv——点云上的可形变卷积网络

原创 | 文 BFT机器人 《KPConv: Flexible and Deformable Convolution for Point Clouds》是一篇发表于2019年的研究论文&#xff0c;作者为Hugues Thomas、Charles R. Qi、Jean-Emmanuel Deschaud、Beatriz Marcotegui和Franois Goulette。这篇论文关注于点云数据上的卷积操作…

前置微小信号放大器是什么

前置微小信号放大器是一种专门用于放大微弱输入信号的电子设备。它常用于电子测量、信号传输、音频放大等领域&#xff0c;能够将微小的输入信号放大到足够大的幅度&#xff0c;以便后续处理或传输。下面我们将从工作原理、应用和发展趋势三个方面&#xff0c;详细探讨前置微小…

在国内PMP的含金量高吗?

首先我们需要了解一下PMP证书的用处 PMP含金量是毋庸置疑的&#xff0c;从事项目/产品/运营/管理/IT行业的社会人基本都会将这个证收入囊中。其他有升职涨薪计划的也在悄咪咪报考蓄力中&#xff0c;能在职业生涯锦上添花&#xff0c;精益求精。 一&#xff0c;PMP证书的优势体…

什么是安全运营中心(SOC),应该了解什么

安全运营中心&#xff08;SOC&#xff09; 是一种企业监视和警报设施&#xff0c;可帮助组织检测安全威胁、监视安全事件和分析性能数据以改进公司运营。 什么是安全运营中心&#xff08;SOC&#xff09; 安全运营中心&#xff08;SOC&#xff09;是一个中央监视和监视中心&a…

安装气象站的重要意义是什么?

气象站是一种用于观测、记录和报告天气数据的设备或系统。它通常包括各种传感器、供电系统和环境监控主机&#xff0c;用于测量和记录气温、湿度、风速、风向、气压、降雨量、雪深等气象参数。 气象站有多种类型&#xff0c;包括自动气象站、人工气象站和便携式气象站。自动气…

elementUI可拖拉宽度抽屉

1&#xff0c;需求&#xff1a; 在elementUI的抽屉基础上&#xff0c;添加可拖动侧边栏宽度的功能&#xff0c;实现效果如下&#xff1a; 2&#xff0c;在原组件上添加自定义命令 <el-drawer v-drawerDrag"left" :visible.sync"drawerVisible" direc…

【狂神】SpringMVC 怎样才能直接手动输入.jsp的页面就可以访问了?

看秦老师视频的时候&#xff0c;觉得非常疑惑&#xff0c;为什么可以直接输入form.jsp就能跳转到相应地页面。如果你和我一样眼瞎&#xff0c;那确实是有点崩溃。注意看&#xff1a; 发现了吗&#xff1f;这几个文件并没有放在WEB-INF文件下&#xff0c;所以视图解析器便不生效…

实用技巧:使用Python进行文本处理

引言 作为一个Linux持续学习者&#xff0c;我们经常需要处理文本文件&#xff0c;例如提取特定内容、格式化数据或者进行文本分析等。在这篇文章中&#xff0c;我将介绍使用Python进行文本处理的一些实用技巧&#xff0c;帮助你更有效地处理文本数据。无需担心&#xff0c;你不…

pdf可以编辑修改内容吗?看看这几种编辑方法

pdf可以编辑修改内容吗&#xff1f;PDF文件是一种广泛使用的文件格式&#xff0c;但是有时候我们需要对PDF文件进行编辑和修改。那么&#xff0c;PDF文件可以编辑修改内容吗&#xff1f;答案是肯定的。下面介绍几种编辑PDF文件的方法。 第一种方法是使用【迅捷PDF编辑器】。 这…

java JUC并发编程 第六章 CAS

系列文章目录 第一章 java JUC并发编程 Future: link 第二章 java JUC并发编程 多线程锁: link 第三章 java JUC并发编程 中断机制: link 第四章 java JUC并发编程 java内存模型JMM: link 第五章 java JUC并发编程 volatile与JMM: link 第六章 java JUC并发编程 CAS: link 文章…

Springboot上传文件

上传文件示例代码&#xff1a; ApiOperation("上传文件") PostMapping(value "/uploadFile", consumes MediaType.MULTIPART_FORM_DATA_VALUE) public ApiResult<String> uploadFile(RequestPart("file") MultipartFile file) { //调用七…

从0开始 yolov5可以用灰度图像进行训练和检测吗

yolov5可以用灰度图像进行训练吗,从0开始yolov5灰度图训练和检测 文章目录 yolov5可以用灰度图像进行训练吗,从0开始yolov5灰度图训练和检测[toc]1 预演【表1-1 模型结构截取】 2 修改源码使可以灰度训练2.1 修改读取图片模式2.2 修改源码传参中的通道数2.3 运行train.py2.4 修…

java八股文面试[数据库]——BufferPool

Buffer Pool是MYSQL数据库中的一个重要的内存组件&#xff0c;介于外部系统和存储引擎之间的一个缓存区&#xff0c;针数据库的增删改查这些操作都是针对这个内存数据结构中的缓存数据执行的,在操作数据之前&#xff0c;都会将数据从磁盘加载到Buffer Pool中&#xff0c;操作完…

亚马逊店铺如何快速出单?

对于一个新开的亚马逊店铺而言&#xff0c;首先要做的就是想办法让自己的店铺快速出单&#xff0c;只有有订单了&#xff0c;才能够稳住局势&#xff0c;才能够让自己亚马逊店铺在市场上有立足的资本。 不过对于一个亚马逊店铺而言&#xff0c;要想做到快速出单是很难的&#…