Elasticsearch 架构及 Lucene 索引结构原理入门

文章目录

  • Elasticsearch 整体架构
  • Lucene 索引结构
  • Lucene 倒排索引核心原理
  • 倒排索引
  • 倒排表(Posting List)

Elasticsearch 整体架构

在这里插入图片描述
在这里插入图片描述
一个 ES Index 在集群模式下,有多个Node(节点)组成,每个节点就是ES的 instance(实例)
每个节点上会有多个 shard(分片),P1 P2 是主分片,R1 R2 是副本分片。
每个分片上对应着就是一个 Lucene Index (底层索引文件)
Lucene Index 是一个统称:
由多个 Segment(段文件,就是倒排索引)组成,每个段文件存储着的就是 Doc 文档。
commit point 记录了所有的 segments 的信息

Lucene 索引结构

在这里插入图片描述

Lucene 倒排索引核心原理

Lucene 是一个成熟的权威检索库,具有高性能、可伸缩的特点,并且开源、免费。在其基础上开发的分布式搜索引擎便是 Elasticsearch。
在这里插入图片描述
Elasticsearch 的搜索原理简单过程是,索引系统通过扫描文章中的每一个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统就会根据事先的索引进行查找,并将查找的结果反馈给用户的检索方式。

倒排索引

倒排索引是整个 ES 的核心,正常的搜索以一本书为例,应该是由 “目录 -> 章节 -> 页码 -> 内容” 这样的查找顺序,这样是正排索引的思想。
倒排索引的思路是通过单词到文档ID的关系对应。
在这里插入图片描述
倒排索引包含两个部分:

  • 单词词典(Term Dictionary):记录所有文档的单词,记录单词到倒排列表的关联关系(单词词典一般比较大,通过 B+ 树或哈希拉链法实现,以满足高性能的插入与查询)
  • 倒排表(Posting List):记录了单词对应的文档结合,由倒排索引组成。
    文档ID
    词频 TF - 该单词在文档中分词的位置。用于语句搜索
    位置(Position)- 单词在文档中分词的位置,用于语句搜索
    偏移(Offset)- 记录单词的开始结束位置,实现高亮显示。

倒排表(Posting List)

倒排表记录了对应单词(Term Dictionary)所出现的的文档ID等信息。并且为了搜索的时延肯定需要放在内存中,面对海量的文档必然会存在更多量级的倒排表,为了节约空间,肯定是需要一定的压缩算法。
FOR:(Frame Of Reference)
假设某个包含某个 单词 (Term Dictionary)的文档出现了100W次,那么其对应的倒排表就会非常的大,按1个int占用空间为 4 Byte 计算,仅这么倒排表中的一项就要消耗 3.8MB 空间。
在这里插入图片描述
如上图所示,我们知道一个1个int是4字节,一个字节最大可以存正21亿,1个bit可以存2个数,2个bit可以存4个数(0,1,2,3)。那么假设我们存的都是非常小的数字能否将存储所占空间压下来呢。如果我们只取 posting list 中的数字差值,这将是一个非常小的数字,比如上图是100W个1。这样我们通过只取差值,得到了一个100W个1的列表,并将每个元素只耗费1bit存储了下来。这样可以压缩32倍存储空间。
但事实是,一般没有这么理想的状态。
在这里插入图片描述

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

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

相关文章

【SQL Server报错】在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。

目录 1、报错截图 2、解决步骤 1)打开SQL Server配置管理器 2)检查SQL Server服务 3)检查SQL Server网络配置 4)重启SQL Server数据库 1、报错截图 报错界面忘记截图了,我用的SQL Server2019,这里借…

每天40分玩转Django:Django视图和URL

Django视图和URL 一、课程概述 学习项目具体内容预计用时视图基础函数视图、类视图、视图装饰器90分钟URL配置URL模式、路由系统、命名URL60分钟请求处理请求对象、响应对象、中间件90分钟 二、视图基础 2.1 函数视图 # blog/views.py from django.shortcuts import render…

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写(生成Bug分析柱状图) 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含: 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…

2024.12.14 TCP/IP 网络模型有哪几层?

2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…

【学习笔记总结】华为云:应用上云后的安全规划及设计

一、背景和问题 数字化时代,随着信息技术的飞速发展,企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势,如成本效益、可扩展性、灵活性以及便捷的资源共享等,已然成为了现代业务运营的重要支撑。 今年&#xf…

MySQL--》如何通过选择合适的存储引擎提高查询效率?

目录 MySQL体系结构 存储引擎简介 存储引擎特点 存储引擎选择 MySQL体系结构 体系结构:可以看作是由多个模块和组件组成的一个系统,每个部分都承担着不同的职责,从客户端到存储引擎每一层都精心设计来提供高效、可靠的数据库服务&#xf…

【机器学习与数据挖掘实战】案例02:基于K-Means算法的航空公司客户价值分析

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈机器学习与数据挖掘实战 ⌋ ⌋ ⌋ 机器学习是人工智能的一个分支,专注于让计算机系统通过数据学习和改进。它利用统计和计算方法,使模型能够从数据中自动提取特征并做出预测或决策。数据挖掘则是从大型数…

JPG 转 PDF:免费好用的在线图片转 PDF 工具

JPG 转 PDF:免费好用的在线图片转 PDF 工具 在日常工作和生活中,我们经常需要将图片转换为 PDF 格式。无论是制作电子文档、准备演示材料,还是整理照片集,将图片转换为 PDF 都是一个常见的需求。今天为大家介绍一款完全免费、无需…

STM32F103单片机HAL库串口通信卡死问题解决方法

在上篇文章 STM32F103单片机使用STM32CubeMX创建IAR串口工程 中分享了使用cubeMX直接生成串口代码的方法,在测试的过程中无意间发现,串口会出现卡死的问题。 当串口一次性发送十几个数据的时候,串口感觉像卡死了一样,不再接收数据…

Linux 中 sftp 命令基本使用

参考链接 sftp 命令_sftp命令-CSDN博客 登录服务器【必须】 # sftp userNamehost # 例如 sftp root8.138.86.224 上传文件到服务器 使用 sftp 命令可以将本地文件上传到远程主机 # put local_file remote_file # 例如: put E://1.mp4 /root/1.mp4 下载文件 使…

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为&#…

跟着AI 学 AI, 开发一个ChatBot, 集成 Json 数据和查询

按照规律,使用AI生成一个架构图 直接上代码,为了方便学习,直接按照如下方式,复制到你的开发环境即可调试,运行代码。做学习参考。 代码注释多次说明这里,不在赘述。 "type": "carousel&qu…

校园交友app/校园资源共享小程序/校园圈子集合二手物品交易论坛、交友等综合型生活服务社交论坛

多客校园社交圈子系统搭建 校园交友多功能系统源码: 1、更改学校为独立的模块。整体UI改为绿色,青春色,更贴近校园风格。2、圈子归纳到学校去进行运营。每个学校可建立多个圈子。和其他学校圈子互不干扰。3、增加用户绑定学校,以后进入将默认…

游戏引擎学习第50天

仓库: https://gitee.com/mrxiao_com/2d_game Minkowski 这个算法有点懵逼 回顾 基本上,现在我们所处的阶段是,回顾最初的代码,我们正在讨论我们希望在引擎中实现的所有功能。我们正在做的版本是初步的、粗略的版本,涵盖我们认…

多模态-故障诊断 | 大核卷积开启视觉新纪元!

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 基于FFT CNN - BiGRU-Attention 时域、频域特征注意力融合的轴承故障识别模型-CSDN博客 基于FFT CNN - Transformer 时域、频域特征融合的轴承故障识别模型-CSDN博客 P…

30. Three.js案例-绘制并渲染圆弧

30. Three.js案例-绘制并渲染圆弧 实现效果 知识点 WebGLRenderer WebGLRenderer 是 Three.js 中用于渲染 3D 场景的核心类。它利用 WebGL 技术在浏览器中渲染 3D 图形。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选参数对象&#xff…

【从零开始入门unity游戏开发之——C#篇03】变量和常量

文章目录 一、变量1、什么是变量?2、申明变量的固定写法3、变量的类型值和引用类型的区别无符号和有符号位——表示变量所占用的内存空间的大小范围——表示变量的取值范围取值范围和存储单位的关系为什么byte的范围是 0 到 255?为什么 sbyte 的范围是 -…

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥,大风天气频繁,是森林火灾的高发期。相比传统的人力巡查,无人机具有更高的灵敏度和准确性,尤其在夜间或浓雾天气中,依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输,帮助巡…

Jenkins参数化构建详解(This project is parameterized)

本文详细介绍了Jenkins中不同类型的参数化构建方法,包括字符串、选项、多行文本、布尔值和git分支参数的配置,以及如何使用ActiveChoiceParameter实现动态获取参数选项。通过示例展示了传统方法和声明式pipeline的语法 文章目录 1. Jenkins的参数化构建1…

卓易通:鸿蒙Next系统的蜜糖还是毒药?

哈喽,我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…