Elasticsearch:彻底理解 Elasticsearch 数据操作

news2024/10/9 0:51:16

Elasticsearch 中有四种基本的数据操作。 每个操作都有自己的资源需求。每个用例都使用这些操作,但它们会优先于某些操作。

  • Index:在这里被用做动词,而不是其名词索引。处理文档并将其存储在索引中以供将来检索。
  • Delete:从索引中删除文档。
  • Update:删除文档并索引替换文档。
  • Search:从一个或多个索引中检索一个或多个文档或聚合。

在今天的文章中,我将详述上面的几个基本操作。

Elasticsearch 架构

如果你对 Elasticsearch 还不是很熟悉的话,我建议你可以先去读一下我之前的文章:

  • Elasticsearch 简介

  • Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica

简单地说,一个 Elasticsearch 的集群由如下的部分组成:

如上所示,Elastic Stack 由 Elasticsearch,Kibana,Beats 及 Logstash 来组成。用一句话来描述,Kibana 是用来可视化及搜索 Elasticsearch 的数据,管理及监控 Elasticsearch 集群,发送通知等。它是 Elastic Stack 的窗口。你可以进一步阅读文章 “Kibana:如何开始使用 Kibana” 以了解更多。 Elasticsearch 是一个大数据的搜索及分析引擎。Beats 及 Logstash 是被用来把数据写入到 Elasticsearch 中的工具。最新的 Elastic Stack 建议使用 Elastic Agent 来作为数据摄入的方式:

 有关上面的节点的描述:

  • Data:索引、存储和搜索数据
  • Master:管理集群状态
  • Ingest:转换摄入数据
  • Machine learning:处理机器学习模型
  • Coordinator:委托请求并合并搜索结果。通常由不担任任何角色的节点来担当,尽管也可以由 data, master,ingest 及 machine learning 节点来担当。

 有关这些节点的具体描述,请参阅我之前的文章 “ Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica”

了解 Elasticsearch index 数据流

上图显示了文档被索引到 Elasticsearch 集群时的数据流。 它包括以下基本步骤:

1)步骤1:客户端发出将文档放入集群的请求,集群中的协调器节点接受请求进行处理。

2)第 2 步:协调器节点使用索引请求中的管道(pipeline)参数来检查文档是否需要在路由到数据节点进行进一步处理之前进行丰富或转换。

如果答案为否,文档将被路由到集群中的数据节点。 如果答案为是,文档将被路由到集群中的摄取节点(ingest node)以丰富文档。 丰富过程完成后,摄取节点继续将丰富的文档路由到数据节点。

集群中哪个数据节点将进一步处理文档的决定是基于索引的分片信息和哈希模公式:

shard = hash(routing) % number_of_shards

从上面的公式中可以看出来,如果 number_of_shards 改变了,那么得出来的 shard 值也会改变。这也是为啥我们在创建一个索引之后,不能修改 number_of_shards 这个参数。一旦 number_of_shards 被修改了之后,我们必须通过 reindex 的方式写入另外一个索引来进行搜索和查询。

3)第三步:数据节点将文档解析为 JSON 对象,然后检查对象中是否有任何文本值。 如果找到文本值,就会涉及文本分析过程。 它分析文本并将其分解为更有用的结构组件。 它还应用一些处理来使文档与全文搜索更相关。 最后,文档被添加到内存缓冲区并附加到事务日志(translog)。

当缓冲区填满时,文档被写入一个段,然后缓冲区被清除。 同时,事务日志仍然保留文档,直到它变得足够大,执行完整提交。 文档永久刷新到磁盘,旧的事务日志被删除并创建新的。关于这个部分的描述,你可以阅读我之前的文章 “Elasticsearch:Elasticsearch 中的 refresh 和 flush 操作指南”。

如果启用复制,则触发复制数据过程。 该数据节点向包含索引副本分片的数据节点发送复制请求。 此处的整个索引过程将在该节点上完成以创建这些文档的副本。

了解 Elasticsearch 搜索数据流

搜索是信息检索的通用术语。 Elasticsearch 提供各种检索功能,包括全文搜索、地理搜索、范围搜索、脚本搜索和聚合。你可以阅读文章 “开始使用 Elasticsearch (2)”。

Elasticsearch 如何在幕后执行搜索查询? 下图显示了搜索操作的数据流。

Elasticsearch 在非正式称为 scatter、search、gather 和 merge 的阶段执行搜索。

1)第一阶段:scatter
客户端向集群发出搜索请求,集群中的协调器节点接受请求进行处理。 基于索引的信息,协调器节点将搜索请求路由到包含索引数据的所有数据节点。

2)第 2 阶段:search
在第一阶段接收到搜索请求的每个数据节点解析请求以检查搜索查询中的任何查询子句是否需要应用文本分析过程。 如果是,文本分析处理开始。 最后,数据节点在索引分片的每个段上执行搜索请求。有关文本分析,请详细阅读我的另外一篇文章 “Elasticsearch: analyzer”。

3)第 3 阶段:gather 和 merge
第一阶段 中的协调器节点从将搜索请求路由到的所有数据节点收集搜索结果。 收集处理完成后,合并处理开始。 它对搜索结果进行合并、排名和排序,然后将它们返回给客户端。

了解 Elasticsearch 删除数据流

如何从 Elasticsearch 中删除文档? 下图显示了删除单个文档的幕后数据流。

1)步骤1:客户端发出从集群中删除文档的请求,集群中的协调节点接受请求进行处理。

2)第 2 步:基于分片信息和文档 ID,协调节点将删除请求路由到包含存储文档的主分片的数据节点。

3)第 3 步:数据节点不会立即删除文档,它会将文档标记为已删除,然后将其添加到内存缓冲区并将其追加到事务日志(translog)中。 此时,文档是不可搜索的。

当缓冲区填满时,changes 将写入段并且缓冲区被清除。 同时,事务日志仍然保留已删除的文档,直到它变得太大,执行完整提交。 更改被刷新到磁盘,文档被永久删除。

如果为索引启用了复制,则复制数据进程开始。 该数据节点将删除请求发送到包含索引副本分片的数据节点。 此处的整个删除过程将在该节点上完成,以将文档从副本分片中完全删除。

了解 Elasticsearch 更新数据流

Elasticsearch 中的文档是不可变的。 当 Elasticsearch 更新文档时,它会删除原始文档并为新的、更新的文档编制索引。 这两个操作在每个 Lucene 分片中以原子方式执行。这会产生 delete 和 index 操作的成本,但它不会调用任何摄取管道。

我们可以描述 update 数据流为如下的操作:

Update = Delete + (Index - Ingest Pipeline)

好了,今天的文章就写到这里。希望你对 Elasticsearch 的数据操作有一个基本的了解。 这对以后如何提高索引速度,提高搜索速度提供一个良好的理解基础。更多关于如何优化这方面的文章,请详细阅读文章

  • Elasticsearch:增加 Elasticsearch 写入吞吐量和速度的完整指南

  • Elasticsearch:如何提高查询性能

  • Elasticsearch:如何提高 Elasticsearch 数据摄入速度

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

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

相关文章

【攻防世界】easyphp

废话不多说,打开环境就是一大段的php代码,对于我一个小白来说,还是难阿!只能一点点琢磨构造payload的思路,当然也是在网上参考了别人的wp。记录下来也为了加深自己的印象,有事没事都能翻一翻,温…

快速入门OAuth2

1. 什么是OAuth2.0OAuth2.0是目前使用非常广泛的授权机制,用于授权第三方应用获取用户的数据。举例说明:用户可以通过选择其他登录方式来使用gitee,这里就使用到了第三方认证。来自RFC 6749OAuth 引入了一个授权层,用来分离两种不…

2023年Verasity路线图深度分析

Verasity最近发布了迄今为止最详细和雄心勃勃的2023年路线图之一。它主要集中在VeraViews的商业目标,以及VeraCard的推出,它充满了产品更新和令人兴奋的新功能,既为我们的企业对企业(B2B)产品,也为你&#…

解决PowerShell或vscode无法启动yarn的问题

问题现象:在PowerShell中启动yarn时报错:yarn : 无法加载文件 C:\Users\{{username}}\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID135170 中的 about…

DL@starter@Perceptron感知机@简单神经网络

文章目录感知机简单感知机基础形式偏置值形式逻辑门感知机机器学习的任务(单层)感知机的局限线性和非线性多层感知机从与非门到计算机小结从感知机到神经网络激活函数🎈非线性激活函数step 函数阶跃函数的实现(numpy)sigmoid functionsigmoid函数sigmoid 函数和阶跃…

PHP前后分离接口加密探讨( AES+RSA )

参考文章: php之RSA加密解密_小吴-斌的博客-CSDN博客_php rsa加密 RSA和AES的区别_LC超人在良家的博客-CSDN博客_aes rsa PHP实现非对称加密的方法 | 私钥及公钥加密解密的方法_php 公钥 私钥_LordForce的博客-CSDN博客 RSA非对称加密 特点: 只需交换公钥&…

2、python框架Unitter轻量级框架

类与对象定义 面向过程与面向对象 面向过程编程: 根据操作数据的函数或语句块来设计程序的。 面向对象编程: 数据和功能结合起来,用称为对象的东西包裹起来组织程序的方法; 在大多数时候你可以使用面向过程编程,…

Hudi系列11:Flink CDC 将MySQL的数据写入Hudi

文章目录一. 下载依赖包二. 源端数据准备三. 使用Flink cdc mysql连接器创建flinkSQL映射表四. 创建FlinkSQL Hudi连接器创建hudi表五. 将数据从CDC表插入hudi表六. 测试增删改参考:一. 下载依赖包 将 flink-sql-connector-mysql-cdc-2.2.1.jar 下载后,上传到$FLIN…

动手深度学习-欠拟合和过拟合

目录训练误差和泛化误差K-折交叉验证欠拟合和过拟合模型复杂性数据集大小权重衰减权重衰减简洁实现暂退法(Dropout)从零开始实现Dropout简洁实现参考教程:https://courses.d2l.ai/zh-v2/ 训练误差和泛化误差 训练误差(training …

5000字带你了解机房搬迁有哪些步骤?干货收藏!

机房搬迁不仅仅是把机房的设备迁移到新机房那么简单,而是要求网络系统的迁移和集中存储系统的迁移必须安全平稳,不能过长时间影响生产应用。表面上就是几个IT 民工的搬运,但实际是一项目高度集中的体力与脑力的综合项目。现将一般机房搬迁步骤…

基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Go语言进阶和依赖管理(二)——并发和依赖管理

文章目录一、本文重点内容:二、详细知识点介绍:1、并发和并行并发:并行:结论:2、Go的协程协程:线程:3、协程通信方式一:使用通道交换数据方式二:使用共享内存完成数据交换…

SpringBoot 与 SpringCloud 有什么区别?

🏆今日学习目标: 🍀SpringBoot 与 SpringCloud 有什么区别? ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区&am…

深拷贝,浅拷贝,引用拷贝有什么区别?

目录 引用拷贝 浅拷贝 深拷贝 深拷贝,浅拷贝,引用拷贝有什么区别? 引用拷贝 当我们向复制一个对象的时候,自然想到的就是赋值,直接赋值给另外一个变量,这种做法只是赋值了对象的地址,即两个变量现在指向的是同一个对象,任意一个对象操作这个属性都会影响到另外一个变量,这…

成为一名网络安全工程师,你应该学习什么?

前言 这是我的建议如何成为网络安全工程师,你应该按照下面顺序学习。 简要说明 第一件事你应该学习如何编程,我建议首先学python,然后是java。 (非必须)接下来学习一些算法和数据结构是很有帮助的,它将帮…

jQuery select三级联动

功能描述: 1 实现三级联动,ajax请求数据。 根据选定级别,查询该级别下的项目类别;根据选择类别,查询该级别类别下所属项目列表; 前端涉及知识点: (1)(‘#app’).change…

【云原生kubernetes】k8s控制器Deployment使用详解

前言 在上一篇我们聊了k8s中各种控制器的使用,本篇将以控制器中比较常用的一种控制器Deployment 进行详细的说明。 一、Deployment 简介 为了更好解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器; 需要说明…

47 转置卷积【动手学深度学习v2】】

47 转置卷积【动手学深度学习v2】】 深度学习学习笔记 学习视频:https://www.bilibili.com/video/BV17o4y1X7Jn/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source75dce036dc8244310435eaf03de4e330 转置卷积 卷积不会增大输入的高…

【Python小游戏】99%的人都不知道,“猜数字”游戏这么玩才能快速胜出,少年,要不要来猜猜看啊~(附源码)

前言 日子从不亏欠,每一个努力向上的人, 未来的走运, 都是过往尽力的积累。 人勤春来早,奋进正当时。新春伊始,我们迎来了2023年开工第一天。 栗子同学恭祝大家开工大吉,新年新气象,万事开门红&#xff…

Spring事务案例:模拟银行转账

Spring事务案例:模拟银行转账一. 概念二. 原程序2.1 表:2.2 service层接口:2.3 dao层接口:2.4 service实现类:2.5 测试用例:三.使用事务改进3.1 开启注解式事务驱动:3.2 开启事务:3.…