Elasticsearch倒排索引详解

倒排索引:

组成

term index(词项索引 ,存放前后缀指针)

Term Dictionary(词项字典,所有词项经过文档与处理后按照字典顺序组成的一个字典(相关度))

Posting List(倒排表,,包含Term的id数组(int类型有序数组,且不重复)、词频、postion、payload、offset等信息)包含两个压缩算法,FOR,RBM

一句话概括:倒排索引就是某个词项到包含当前这个词项id的映射关系

FOR

Frame Of Reference 又叫增量编码压缩,首先Elasticsearch要求倒排索引是有序的(也就是文档id是有序排列的),es会根据文档id两两计算差值,然后根据计算出来的值进行分块,每一块取最大值计算它是2的几次方,得出该块中每一个数字可以用多少个bit位来存储,另外还需要一个字节来表示每一个数据块是用多少bit位来存储一个数字的

FOR算法的核心是用减法来缩减数值大小

RBM

数组中每个数除以2^16,以商,余数的形式表示出来,将相同商的归在一个Container,如果Contaniner中数值容量超过4096使用bitmap的形式来存储一个Container中的数,如果没有超过那就使用short[]来存储,如果是连续数组那就使用RunContainer来存储,其中container分为 ArrayContainerBitmapContainerRunContainer三种

ArrayContainer ArrayContainer采用简单的short数组存储低16位数据,content始终有序且不重复,方便二分查,最大数据量是4096,即8kb, 超过则使用BitmapContainer

BitmapContainer BitmapContainer采用long数组存储低16位数据,BitmapContainer构造方法会初始化一个长度为1024的long数组,因此BitmapContainer无论是存1个数据,10个数据还是最大65536个数据,都始终占据着8kb的内存空间

RunContainer RunContainer主要解决了大量连续数据的问题,原理就是记录初始数字以及连续的数量,但是这种压缩方式对于数据的疏密程度非常敏感,如果Container中所有数据都是连续的,这种压缩方式就会占据优势,如果Container中所有数据都是不连续的且都是偶数或奇数,这种不仅没有压缩反而会膨胀,因此是否选择使用RunContainer是需要判断的,RBM提供了一个转化方法为runOptimize()用于对比和其他两种Container的空间大小,若占据优势则会进行转化

RBM的核心就是通过除法来缩减数值大小

词项索引的检索原理:FST

词项索引数据结构为Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种(基于FST实现)。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较。Trie的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的

前缀树的3个基本性质

1、根节点不包含字符,除根节点外每一个节点都只包含一个字符 2、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 3、每个节点的所有子节点包含的字符都不相同

lucene从4开始大量使用的数据结构是FST(Finite State Transducer)。FST有两个优点:

  1. 空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;

  2. 查询速度快。O(len(str))的查询时间复杂度

FST网页地址:http://examples.mikemccandless.com/fst.py?terms=cat%0D%0Acats%0D%0Acar%0D%0Adog%0D%0Adogs&cmd=Build+it%21

分词的发生时期

1.创建索引时对元数据进行分词

2.执行搜索时对 搜索词分词

正排索引

排索引是按照文档编号或文档ID等有序的方式将每个文档存储在索引中,通过文档编号或ID进行检索

doc values 是正排索引的基本数据结构之一,其存在是为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc values值以节省磁盘空间(不支持 text和annotated_text

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

文章目录 什么是 Consul?安装和运行 ConsulAsp .Net Core 如何集成 Consul 实现服务注册和健康检查Consul.AspNetCore 中的 AddConsul 和 AddConsulServiceRegistration 方法 究竟做了什么?AddConsul 方法AddConsulServiceRegistration 方法 配置 Consul 检查服务封…

16 张动图讲透网络原理

网络其实存在于日常生活中的每一个角落。 你的电脑,打印机,手机,甚至电视等等都属于网络设备。通常,你需要将这些设备通过网络连接起来,这样就可以实现数据的传输和共享,让工作生活更加便捷。 如果你的连接…

云服务器哪家强?当属阿里云腾讯云or华为云?

云服务器哪家强?当属阿里云腾讯云or华为云?云服务器哪家便宜?2024最新整理你要的都在这!头部云厂商阿里云、腾讯云、华为云、京东云、UCloud等都在降价,阿腾云atengyun.com分享2024年云服务器租用价格给你惊喜! 便宜云…

乱 弹 篇(一)

题记 对于“乱弹”这个词汇的释义,《辞海》上仅有“ 戏曲剧种,亦指声腔 ”8个字。而由于“乱弹 ”的“ 弹”谐音“谈”,这就容易让人联想到“乱谈”。不过从文体上看,“乱谈”也非乱七八糟之谈,反倒是“东西南北&…

系分笔记数据库反规范化、SQL语句和大数据

文章目录 1、概要2、反规范化3、大数据4、SQL语句5、总结 1、概要 数据库设计是考试重点,常考和必考内容,本篇主要记录了知识点:反规范化、SQL语句及大数据。 2、反规范化 数据库遵循范式的设计,使得多表查询和连接表查询较多的时…

Tomcat简介及搭建

1、Tomcat概述 自2017年11月编程语言排行榜 Java 占比 13%,高居榜首,Tomcat也一度成为Java开发人员的首选。其开源、占用系统资源少、跨平台等特性深受广大程序员喜爱。本篇文章主要讲解如何部署 Tomcat 服务,根据生产环境实现多个虚拟主机的…

一种具有轨迹优化的无人驾驶车实时运动规划器 论文阅读

论文题目:A Real-Time Motion Planner with Trajectory Optimization for Autonomous Vehicles Abstract 本文的实时规划器首先将空间离散化,然后基于一组成本函数搜索出最佳轨迹。迭代优化所得到的轨迹的Path和Speed。post-optimization计算复杂度低&…

蚂蚁爱购--靠谱的SpringBoot项目

简介 这是一个靠谱的SpringBoot项目实战,名字叫蚂蚁爱购。从零开发项目,视频加文档,十天就能学会开发JavaWeb项目。 教程路线是:搭建环境> 安装软件> 创建项目> 添加依赖和配置> 通过表生成代码> 编写Java代码&g…

GB28181/GB35114平台LiveGBS何如添加白名单,使指定海康、大华、华为等GB28181摄像头或录像机设备可以免密接入

1、什么是GB/T28181级联 协议定义中的解释如下: 级联 cascadednetworking 两个信令安全路由网关之间按照上下级关系连接,上级中心信令控制服务器通过信令安全路由网 关可调用下级中心信令控制服务器所管辖的监控资源,下级中心信令控制服务器通过信令安全路由网 关向…

【代码随想录算法训练营-第七天】【哈希表】454,383,15,18

454. 四数相加 II 第一遍 思路 想不出来,除了暴力解法,完全想不出来其他解法,看答案思路了…学习了两个新的方法: getOrDefault:返回指定键对应的值,如果不存在,则返回默认值containsKey&…

redis缓存雪崩、穿透和击穿

缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机或者大量缓存集中在某一个时间段失效。缓存挂了,此时 1 秒 5000 个请求全部落数据库,…

基于springboot+vue心理测试管理系统

摘要 基于Spring Boot 和 Vue 的心理测试管理系统是一个综合利用现代Web开发技术的应用程序。系统采用了Spring Boot作为后端框架,通过其简化的配置和强大的功能提供了稳健的服务器端支持。前端则使用Vue.js,一个灵活、高效的JavaScript框架,…

版本控制系统教程

1.Git的基本介绍 1.1 Git的概念 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.Git与常用的版本控制工具CVS,Subversion等不同&#xff…

Windows下安装部署Redis

一、下载 地址:https://github.com/MSOpenTech/redis/releases Redis-x64-3.2.100.msi版的比较简单,下载之后直接下一步,下一步… 即可完成安装部署。 这里主要演示Redis-x64-3.2.100.zip的安装部署过程,将Redis-x64-3.2.100.z…

多语言生成式语言模型用于零样本跨语言事件论证提取(ACL2023)

1、写作动机: 经过预训练的生成式语言模型更好地捕捉实体之间的结构和依赖关系,因为模板提供了额外的声明性信息。先前工作中模板的设计是依赖于语言的,这使得很难将其扩展到零样本跨语言转移设置。 2、主要贡献: 作者提出了一…

Redis的设计、实现

数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样Redis会在合适的…

linux创建文件并分配权限

linux中对文件的定义 在Linux中,文件是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。文件名是数据有序序列集合(文…

php 的数学常用函数

目录 1.常用列表 2.代码示例 1.常用列表 函数名描述输入输出abs()求绝对值数字绝对值数字ceil()进一法取整浮点数进一取整floor()舍去法求整浮点数直接舍去小数部分fmod()浮点数取余 两个浮点 数,x>y 浮点余数 pow()返回数的n次方基础数n次方乘方值round()浮点数四舍五入…

镜像迁移脚本

在日常的服务部署开发中,我们有时需要迁移环境,将服务器上的私有镜像从一个服务器迁移到另一个服务器中。在以微服务为架构的项目中,我们的一个项目可能存在大量的镜像,对每一个镜像单独进行导出打包迁移即重复又麻烦,…

vivado编译设置、执行设置、bit流生成设置

合成设置 使用“合成设置”可以指定约束集、合成策略、合成选项,以及要生成的报告。选项由选定的定义综合策略或综合报告策略,但您可以用自己的策略覆盖这些策略设置。您可以选择一个选项来查看对话框底部的描述。了解更多有关“合成设置”的信息&#…