【es学习】

news2025/2/28 17:56:09

es学习

  • 1. 倒排索引
  • 2. stored fields 用于存储文档信息
  • 3. doc values 用于排序和聚合
  • 4. segment 具备完整搜索功能的最小单元
  • 5. lucene单机文本搜索库
  • 6. 从lucene到es:高性能 高扩展性 高可用
  • 7. node角色分化
  • 8. es写入流程
  • 9. es搜索流程
  • 10. 倒排索引涉及的数据结构
  • 11. scroll

1. 倒排索引

每条数据都是一个文档,对文档内容进行分词,得到多个词项term,构建term与文档id的索引表如下:
在这里插入图片描述

这种表格中,查找指定term时需要o(n)遍历,所以按照字典序排序,二分查找指定tern

词项叫作term dictionary,词项对应的列表叫作posting list,他们两个组成的结构就叫作倒排索引

在这里插入图片描述
term dictionary太多了,利用前缀树的思想进一步优化其存储、构建一颗目录树(目录树的节点存放这些词项在磁盘中的偏移量),体积小,可以放进内存中,这就是term index,加速了搜索:
在这里插入图片描述
这样可以通过term index快速获取词项在term dictionary中的大概位置,然后再通过少量检索定位到词项即可

2. stored fields 用于存储文档信息

到此为止实现了查找功能,但是我们现在拿到的是文档的id,需要将完整的文档返回给用户

这些文档就是存储在stored fields中,是个行式存储结构

3. doc values 用于排序和聚合

场景:用户需要对文档进行排序,原始做法是先筛选出符合条件的文档,再根据文档中的指定字段进行排序
doc values可以加速这个功能(空间换时间):将待排序的字段集中存放,需要用到的时候再重新排序。这种列式存储结构就是doc values

4. segment 具备完整搜索功能的最小单元

在这里插入图片描述

5. lucene单机文本搜索库

一批文档组成上面一个segment,新来的文档如果想加入,那么旧segment就要修改四个组件中的好多内容,太麻烦了
所以新来的一批文档会写入新的segment中

多个segment也会定期进行合并,这就构成了一个最简单的单机文本检索库 lucene

es就是在此基础上,提供了高性能、高可用

6. 从lucene到es:高性能 高扩展性 高可用

高性能

分为多个索引名,每个索引分shard,每个shard是一个独立的lucene库,将读写操作分到多个shard中去

高扩展性

不同shard分到多台机子上

在这里插入图片描述
高可用

给每个分片多加几个副本,分为primary shard & replica shard 主分片和副本分片,主分片同步数据给副本,副本提供读操作,主挂了它顶上

7. node角色分化

如果每个节点都具备这些能力,比较冗余
在这里插入图片描述
集群小或者压力不大的时候可以一个节点身兼数职

选主过程:去中心化
node之间互相同步数据,让所有node看到的集群数据状态都是一致的
这样集群中所有节点都能参与选主过程,也能知道集群中某个node是不是挂了

8. es写入流程

客户端请求过来发送到协调节点,协调节点通过hash路由判断数据应当写入到哪个数据节点里的哪个shard分片(注意是主分片),分片底层是lucene,所以这一步是写入到lucene中的segment内,将数据固化为倒排索引、stored fields、doc values等多种结构。
主分片写完后同步给副本分片,副本也写完后会响应给协调节点一个ack

9. es搜索流程

index name就是你的索引叫啥名

两个阶段:
1.query phrase

请求发到协调节点,协调节点根据index name信息查询有几个shard分片,这些shard分片分布在哪些节点上,将请求转发到这些node的shard上,到这里底层就是lucene了,lucene底层并发搜索多个segment,利用每个segment内部的倒排索引获取到文档id,并结合doc values获得排序信息。
分片将结果聚合返回(文档id)给协调节点,协调节点再聚合一次(文档id)

2.fetch phrase

协调节点再次拿着文档id请求数据节点中的shard,shard底层的lucene库会从segment中的stored fields中读取完整的文档信息并返回给协调节点,协调节点再返回给客户端

10. 倒排索引涉及的数据结构

参考

FOR:压缩posting list,用差分数组的思想降低存储所需空间 参考

RBM:参考

11. scroll

scroll使用:适合那种需要一次性或分批拉出大量数据做离线处理、迁移等。可以提升点效率。

设置scroll有效期,表示需要保持搜索的上下文环境多久

如果把 From + size 和 search_after 两种请求看做近实时的请求处理方式,那么 scroll 滚动遍历查询显然是非实时的。数据量大的时候,响应时间可能会比较长。

Scroll 和 PIT(Point in Time)是 Elasticsearch 中两个不同的概念,它们在一定程度上可以关联起来,但是有着不同的作用和用途。

scroll用于滚动搜索全量数据:参考

pit用于支持一段时间内的数据一致性,es7.10之后才支持:参考

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

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

相关文章

【海奇HC-RTOS平台E100-问题点】

海奇HC-RTOS平台E100-问题点 ■ 屏幕是1280*720, UI是1024*600,是否修改UI■ hc15xx-db-e100-v10-hcdemo.dtb 找不到■ 触摸屏驱动 能否给个实例■ 按键驱动■ __initcall(projector_auto_start)■ source insigt4.0 #ifdef 代码怎么自动灰显示问题■ 补丁是打在运行程序&#…

人工智能在前列腺癌中的研究进展|顶刊速递·24-08-15

小罗碎碎念 今天的推文虽然只有五篇文献,但是内容分布还是很均匀的,影像组学、病理组学和基因组学均有涉及。 第一篇和第四篇是与病理AI相关的,这两篇文献都很有参考价值。第一篇把我们熟知的模型(如全监督、弱监督和无监督模型…

场外期权如何开仓和平仓?

场外期权交易是在国内已经有九年的时间了,第一个上市的期权品种就是上证50ETF期权,在国内是一直处于平稳发展阶段。场外期权如何开仓和平仓其实很简单,场外期权开仓都是买入开仓,平仓选择卖出平仓或者一键平仓,下文为大…

UE5学习笔记8-创建一个武器的类和蓝图

一、目标 当人物模型和武器模型重叠时显示小窗口,按E键时拾取武器,当拾取到武器时窗口不可见,当人物靠近其他人物时(其他客户端/服务器)窗口同样不可见,在具有Authority权限的PC上同理 二、实现过程 1.创建一个武器的类命名为Wea…

Android进阶之路 - res、raw、assets 资源解析、区别对比

那天遇到一个资源目录层级的问题,索性重新整理记录一下,希望能帮到如吾往昔之少年的你们,哈哈哈哈哈哈… 一脸茫然,越写越多,时间成本属实有点大,就当一起来基础扫盲吧 resdrawablemipmapvaluescolor asset…

spark-sgg-java

spark的内置模块: 一 spark集群部署(yarn) spark是一种计算框架,spark集群部署有很多种. 如果资源是当前单节点提供的,那么就称之为单机模式.如果资源是当前多节点提供的,那么就称为分布式模式.如果资源是由yarn提供的,那么久成为yarn部署环境.如果资源是由spark提供的,那么就…

excel导入

Excel数据导入 使用easyexcel和hutool-poi实现excel导入 1、pom依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency><dependency><groupId…

SQL 数据库设计、事务、视图 <12>

一、数据库设计 1.多表之间的关系 1&#xff09; 一对一&#xff08;了解&#xff09; 如&#xff1a;人和身份证 分析&#xff1a;一个人只有一个身份证&#xff0c;一个身份证只能对应一个人 2&#xff09;一对多&#xff08;多对一&#xff09; 如&#xff1a;部门和员…

Apache-JMeter压测工具教程

下载安装 《JMeter官网下载》 下载完成后&#xff0c;找个文件夹进行解压 配置环境变量 JAVA_HOME&#xff08;如果是JAVA8还需要配置CLASSPATH&#xff09;、JMETER_HOME JMETER_HOME修改bin目录下的jmeter.properties文件编码为UTF-8 5.6.3这个版本encoding已经默认为UT…

图片鼠标中心滚轮放大

功能背景 实现以鼠标在图中的位置为中心进行图片的滚轮缩放&#xff0c;现在是无论鼠标位置在哪都以图片中心进行缩放&#xff0c;这不符合预期&#xff1b; 关键点 缩放前鼠标在的位置是 A&#xff08;clinetX,clientY&#xff09; 点&#xff0c;缩放后鼠标的位置是 A’&a…

驱动基础开发

1、字符设备传统开发模板 字符设备驱动框架&#xff0c;首先我们需要去用module_init这个宏去修饰整个驱动的入口函数&#xff0c;用module_exit去修饰整个驱动的出口函数&#xff0c;然后还需要用MODULE_LICENSE用于声明模块的许可证类型。 在入口函数里面我们需要注册字符设…

mitmdump 实时抓包处理

mitmdump 是 mitmproxy 的命令行接口&#xff0c;可以对接 Python 脚本处理请求和响应&#xff0c;这是比 Fiddler , Charles 等工具更加方便的地方&#xff0c;有了它&#xff0c;我们不用再手动抓取和分析HTTP 请求和响应&#xff0c;只要写好请求和响应的处理逻辑就好了。 …

jenkins jdk8下载

jdk8 对应的 jenkins版本是2.346.1 http://updates.jenkins-ci.org/download/war/2.346.1/jenkins.warjenkins和jdk安装教程(安装支持jdk8的最新版本) https://blog.csdn.net/u013078871/article/details/127200623刚买的腾讯云安装jenkins步骤&#xff0c;服务器安装jenkins步…

基于华为atlas的皮带跑偏、空载、堆煤、启停探索

生乎吾前&#xff0c;其闻道也固先乎吾&#xff0c;吾从而师之&#xff1b;生乎吾后&#xff0c;其闻道也亦先乎吾&#xff0c;吾从而师之。吾师道也&#xff0c;夫庸知其年之先后生于吾乎&#xff1f;是故无贵无贱&#xff0c;无长无少&#xff0c;道之所存&#xff0c;师之所…

超详细!!!electron-vite-vue开发桌面应用之配置路由router(五)

云风网 云风笔记 云风知识库 一、安装依赖 npm install vue-router二、配置项目文件路径 三、配置路由router 在src下新建一个router目录&#xff0c;然后在里面添加一个index.ts文件&#xff0c;在里面配置路由 import { createRouter, createWebHashHistory } from vue-…

针对thinkphp站点的漏洞挖掘和经验分享

0x1 前言 浅谈 目前在学习和研究thinkphp相关漏洞的打法&#xff0c;然后最近对于thinkphp资产的收集方面有了一个简单的认识&#xff0c;然后写一篇新手看的thinkphp相关的漏洞收集和挖掘的文章来分享下。然后后面是给师傅们分享下后台文件上传&#xff0c;然后直接打一个ge…

RCE-eval长度限制绕过技巧

目录 限制16字符 题目源码 方法一&#xff1a;$_GET[1] 方法二&#xff1a;file_put_contents 方法三&#xff1a;usort(…$_GET); 限制7字符 题目源码 限制16字符 题目源码 <?php $param $_REQUEST[param]; If ( strlen($param) < 17 && stripos($param…

微服务系列:Spring Cloud 之 Feign、Ribbon、Hystrix 三者超时时间配置

Feign 自身有超时时间配置 Feign 默认集成的 Ribbon 中也有超时时间配置 假如我们又使用了 Hystrix 来实现熔断降级&#xff0c;Hystrix 自身也有一个超时时间配置 注: spring-cloud-starter-openfeign 低一点的版本中默认集成的有 Hystrix&#xff0c;高版本中又移除了。 …

Gin框架接入Prometheus,grafana辅助pprof检测内存泄露

prometheus与grafana的安装 grom接入Prometheus,grafana-CSDN博客 Prometheus 动态加载 我们想给Prometheus新增监听任务新增ginapp项目只需要在原来的配置文件下面新增ginapp相关metric 在docker compose文件下面新增 执行 docker-compose up -d curl -X POST http://lo…

C++ 设计模式——模板方法模式

模板方法模式 模板方法模式逐步重构并引入模板方法模式初始实现提取共性并引入模板方法模式实现具体类 完整代码示例模板方法模式的 UML 图UML 图详细介绍 模板方法模式适用于以下场景 模板方法模式 模板方法模式是一种行为设计模式&#xff0c;它定义了一个算法的骨架&#x…