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.hqwc.cn/news/341306.html

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

相关文章

Logback框架基本认识

文章目录 一.什么是Logback1.1 初识Logbcak 二.Logbcak的结构三.日志的级别四.配置组件详解4.1 logger 日志记录器属性的介绍如何在配置文件里配置 4.2 appender 附加器 配合日志记录器的输出格式4.2.1 控制台附加器4.2.2 文件附加器4.3.3滚动文件附加器 4.3 Filter: 过滤器&am…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字,我们不能把它们用…

【开源】基于JAVA+Vue+SpringBoot的大病保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统配置维护2.2 系统参保管理2.3 大病保险管理2.4 大病登记管理2.5 保险审核管理 三、系统详细设计3.1 系统整体配置功能设计3.2 大病人员模块设计3.3 大病保险模块设计3.4 大病登记模块设计3.5 保险审核模块设计 四、…

[嵌入式软件][入门篇] 搭建在线仿真平台(STM32)

文章目录 一、注册平台二、创建首个项目三、硬件介绍 一、注册平台 进入官方,进行注册: 在线仿真地址 二、创建首个项目 ① 新建项目 ② 搭建一个电路 ③ 用STM32F103搭建一个简单电路 ④ 进入编码界面 三、硬件介绍 红框是必看文档&#xff…

ERROR in Plugin “react“ was conflicted .... 天坑留念-turborepo、eslint plugin

前两天项目代码拉下来,装完依赖启动的时候直接报错: [eslint] Plugin "react" was conflicted between ".eslintrc.js eslint-config-custom eslint-config-alloy/react" and "BaseConfig D:\pan\erp\test\business-servic…

在windows11系统上利用docker搭建linux记录

我的windows11系统上,之前已经安装好了window版本的docker,没有安装的小伙伴需要去安装一下。 下面直接记录安装linux的步骤: 一、创建linux容器 1、拉取镜像 docker pull ubuntu 2、查看镜像 docker images 3、创建容器 docker run --…

Jenkins基础篇--凭据(Credential)管理

什么是凭据 Jenkins的Credentials直译为证书、文凭,我们可以理解为它是钥匙,用来做某些事情的认证。 如Jenkins 和 GitLab交互时,需要添加GitLab的API令牌和登录凭证。 如Jenkins 添加从节点时,需要添加从节点的登录凭证或者Je…

C++力扣题目110--平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:t…

助力智能密集人群检测计数,基于YOLOv8全系列模型【n/s/m/l/x】开发构建通用场景下密集人群检测计数识别系统

在一些人流量比较大的场合,或者是一些特殊时刻、时段、节假日等特殊时期下,密切关注当前系统所承载的人流量是十分必要的,对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段,本文的主要目的是想要…

横版动作闯关游戏:幽灵之歌 GHOST SONG 中文版

在洛里安荒凉的卫星上,一件长期休眠的死亡服从沉睡中醒来。踏上发现自我、古老谜团和宇宙骇物的氛围2D冒险之旅。探索蜿蜒的洞穴,获得新的能力来揭开这个外星世界埋藏已久的秘密。 游戏特点 发现地下之物 探索这个广阔而美丽如画,充满密室和诡…

数据分析讲课笔记01:数据分析概述

文章目录 零、学习目标一、本次课程概述二、数据分析的背景(一)进入大数据时代(二)数据分析的作用 三、什么是数据分析(一)数据分析的概念(二)数据分析的分类1、描述性数据分析2、探…

Spark六:Spark 底层执行原理SparkContext、DAG、TaskScheduler

Spark底层执行原理 学习Spark运行流程 学习链接:https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、Spark运行流程 流程: SparkContext向管理器注册并向资源管理器申请运行Executor资源管理器分配Executor,然后资源管理器启动Execut…