Elasticsearch 索引、类型、文档、分片与副本等核心概念介绍

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、Elasticsearch简介

2、分布式搜索引擎的工作原理

二、Elasticsearch核心组件

1、索引(Index)

2、类型(Type,注:自Elasticsearch 7.x开始已弃用)

3、文档(Document)

4、节点(Node)

5、集群(Cluster)

6、分片(Shard)与副本(Replica)

7、Elasticsearch与MySQL的对应关系


一、引言

1、Elasticsearch简介

Elasticsearch 是一个开源的分布式搜索和分析引擎,最初由 Elasticsearch N.V. 公司开发,并于 2010 年首次发布。它建立在 Apache Lucene 基础之上,提供了分布式的实时搜索和分析功能,被广泛应用于各种场景,包括日志分析、全文搜索、监控和可视化等。

以下是 Elasticsearch 的一些重要特点和功能:

1. 分布式架构:

  • Elasticsearch 是一个分布式系统,数据可以水平扩展到多个节点上存储和处理。
  • 数据被分割成多个分片(Shard),每个分片可以被复制到多个副本(Replica),以提高数据的可用性和容错性。

2. 实时搜索:

  • Elasticsearch 提供了快速的实时搜索功能,可以在大规模数据集上快速地进行搜索、过滤和排序。
  • 支持复杂的搜索查询语法和全文搜索功能,可以满足各种搜索需求。

3. 多种数据类型:

  • Elasticsearch 支持多种数据类型的存储和索引,包括文本、数字、日期、地理位置等。
  • 支持结构化数据和非结构化数据的索引和查询。

4. 强大的聚合和分析:

  • Elasticsearch 提供了丰富的聚合(Aggregation)功能,可以对数据进行统计、分组、计算等操作。
  • 支持各种聚合函数和桶(Bucket)操作,可以生成复杂的数据分析报表和可视化。

5. RESTful API:

  • Elasticsearch 提供了基于 RESTful API 的接口,支持各种 HTTP 请求和 CRUD 操作。
  • 开发者可以使用各种编程语言和工具与 Elasticsearch 进行交互,实现数据的索引、搜索和分析。

6. 可扩展性和灵活性:

  • Elasticsearch 提供了丰富的插件和扩展机制,可以根据需求定制和扩展功能。
  • 支持与其他开源工具和系统集成,如 Logstash、Kibana、Beats 等,构建完整的日志分析和监控解决方案。

2、分布式搜索引擎的工作原理

  1. 数据采集:分布式搜索引擎从多个来源采集数据,这些数据可以是网页、文档、日志、数据库等。数据采集可以通过网络爬虫、日志收集器等方式进行。
  2. 数据处理和索引构建:采集到的数据需要进行处理和索引构建,以便后续的快速搜索。在这个阶段,文本数据会被分词、分析,并构建索引结构。索引结构通常包括倒排索引等,用于加快搜索速度和提高搜索精度。
  3. 索引分片和分布式存储:索引构建完成后,索引数据会被分片存储在多个节点上,以确保数据的高可用性和可扩展性。分布式存储系统通常使用分布式文件系统(如HDFS)、分布式数据库(如Elasticsearch、Apache Solr)、NoSQL数据库(如MongoDB、Cassandra)等。
  4. 搜索请求处理:当用户提交搜索请求时,搜索引擎会接收到请求并进行处理。搜索请求处理包括解析用户查询、检索相关文档、计算文档相关度等步骤。通常情况下,搜索请求会被路由到多个索引分片上并行处理,以提高搜索速度。
  5. 结果聚合和排序:搜索引擎会将检索到的文档按照相关度排序,并返回给用户。搜索结果可能还包括分页、高亮显示、聚合等功能,以提高用户体验。
  6. 搜索结果缓存:为了提高搜索性能,搜索引擎通常会使用缓存来存储热门搜索结果。这样,对于相同的查询请求,可以直接从缓存中获取结果,而不需要重新计算。
  7. 系统监控和优化:搜索引擎会持续监控系统性能、用户行为等指标,并根据监控结果进行系统优化和调整,以提高搜索效率和用户满意度。

 

二、Elasticsearch核心组件

1、索引(Index)

Elasticsearch 的核心组件之一是索引(Index)。索引是 Elasticsearch 中存储和组织数据的基本单位,类似于关系型数据库(MySQL)中的表

1. 定义:

  • 索引在 Elasticsearch 中是一个逻辑存储单元,类似于关系型数据库中的“数据库”概念。
  • 它是一个文档的集合,这些文档具有相似的特性或属于同一逻辑分类。

2. 分片与副本:

  • 索引可以包含一个或多个分片(Shards),每个分片都是一个 Lucene 实例,可以独立地进行搜索和存储操作。分片允许 Elasticsearch 在多个服务器上水平扩展,从而处理更多的数据和查询。
  • 每个分片可以有零个或多个副本(Replicas),副本是分片的完整拷贝,用于提供数据的冗余和容错性。当某个分片所在的服务器出现故障时,可以从其副本中恢复数据。

3. 数据存储:

  • 索引中的文档被存储为 JSON 格式,这使得 Elasticsearch 能够存储结构化和非结构化数据。
  • Elasticsearch 使用倒排索引(Inverted Index)技术来实现高效的全文搜索。倒排索引将文档中的单词与其在文档中的位置信息关联起来,从而可以快速定位包含特定单词的文档。

2、类型(Type,注:自Elasticsearch 7.x开始已弃用)

在Elasticsearch的早期版本中,类型(Type)是一个重要的概念,它用于在一个索引中定义不同的文档类型。从Elasticsearch 7.x版本开始,类型(Type)的概念已经被弃用,并在8.x版本中完全移除。这是为了简化索引和搜索操作,并提高数据的一致性和可靠性。

在早期的Elasticsearch版本中,类型允许用户在一个索引中存储多种类型的文档。每个类型都有自己的映射(Mapping),定义了文档的结构和属性。这种灵活性使得用户可以在一个索引中存储具有不同结构的数据,但也可能导致数据管理和查询的复杂性增加。

随着Elasticsearch的发展,官方团队发现类型的存在带来了许多问题。首先,它增加了索引的复杂性,使得管理和优化变得更加困难。其次,类型在某些情况下可能导致数据不一致和查询错误。因此,官方决定逐步弃用类型,并在8.x版本中完全移除它。

在没有类型的Elasticsearch中,每个索引都只能包含一种类型的文档。这意味着用户需要为每个不同的数据类型创建一个单独的索引。虽然这可能会增加索引的数量,但它可以提高数据的一致性和可靠性,并简化索引和搜索操作。

3、文档(Document)

在 Elasticsearch 中,文档(Document)是存储在索引(Index)中的基本数据单位。每个文档都是一个 JSON 格式的数据对象,它包含了一系列字段(Field)和对应的值。文档可以被索引、检索、更新和删除。

文档(Document)在 Elasticsearch 中相当于 MySQL 中的行(Row)。就像 MySQL 中的每一行代表一个数据记录,而 Elasticsearch 中的每个文档也代表着一个数据实体。因此,文档和行都是存储在数据库中的基本数据单位,它们都包含了一系列的字段和对应的值。 

以下是关于 Elasticsearch 文档的一些重要概念和特点:

  1. 结构化数据:文档是结构化的数据对象,由多个字段组成。每个字段都有一个名称和对应的值,可以是简单的数据类型(如文本、数字、日期等)或复杂的数据结构(如嵌套对象、数组等)。
  2. 唯一标识:每个文档都有一个唯一标识符(ID),用于在索引中唯一标识该文档。ID 可以由 Elasticsearch 自动生成,也可以由用户指定。
  3. 索引存储:文档被存储在索引中,每个索引可以包含多个文档。索引是文档的集合,类似于关系型数据库中的表。
  4. 字段映射:文档的字段映射定义了每个字段的数据类型、分析器等属性。字段映射可以手动指定,也可以由 Elasticsearch 根据插入的文档自动推断生成。
  5. 全文搜索:Elasticsearch 支持全文搜索,可以对文档中的文本字段进行全文检索。全文搜索可以根据关键词、词语匹配度等条件快速定位到符合条件的文档。
  6. CRUD 操作:文档支持 CRUD 操作,即创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。通过 Elasticsearch 的 API 可以对文档进行增删改查操作。
  7. 版本控制:Elasticsearch 支持文档的版本控制,每个文档可以有多个版本。当对文档进行更新操作时,Elasticsearch 会自动创建新版本,并保存历史版本的数据。

文档是 Elasticsearch 中存储和组织数据的基本单位,具有灵活的数据模型、强大的全文搜索和分析功能,是构建分布式搜索引擎和分布式数据存储系统的核心组件之一。

 

4、节点(Node)

Elasticsearch中的节点(Node)指的是Elasticsearch实例的运行实例,即一个独立的Elasticsearch服务进程。每个节点都是一个独立的工作单元,负责存储数据、参与数据处理(如索引、搜索、聚合等)以及参与集群的协调工作。

通过多个节点(Node),可以组成Elasticsearch高可用集群

节点可以承担多种角色,包括但不限于:

  • 主节点(Master Node):负责集群范围内的元数据管理和变更,如索引创建、删除、分片分配等。
  • 数据节点(Data Node):存储实际数据和相关的索引文件,参与数据的索引、搜索和恢复过程。
  • 协调节点(Coordinating Node):接收客户端请求,将请求路由至适当的节点,并将结果汇总返回给客户端。每个节点都可以充当协调节点,也可以专门设置某些节点仅作为协调节点。

节点可以在物理或虚拟机上单独部署,也可以在同一台机器上运行多个节点(但需注意资源分配)。节点通过HTTP协议进行通信,共同管理集群的状态和数据。在Elasticsearch集群中,多个节点协同工作,共同提供高效、可靠的数据存储和搜索服务。

5、集群(Cluster)

在 Elasticsearch 中,集群(Cluster)是由一个或多个节点(Node)组成的分布式系统。这些节点协同工作,共同存储、索引和搜索数据,提供高可用性、可伸缩性和容错性。

  1. 节点的集合:集群是由多个节点组成的集合。每个节点都是一个独立的 Elasticsearch 实例,可以独立运行,也可以加入到一个集群中。
  2. 数据分片和副本:集群中的数据被分成多个分片(Shard),每个分片可以在集群的不同节点上进行存储和复制。分片的复制称为副本(Replica),用于提高数据的可用性和容错性。
  3. 负载均衡:集群可以自动进行负载均衡,将搜索请求和索引请求分配到各个节点上,以实现数据的均衡存储和处理。
  4. 故障检测和容错:集群可以检测到节点的故障并进行处理,例如自动将丢失的分片复制到其他节点上,以确保数据的完整性和可用性。
  5. 主节点:集群中的主节点(Master Node)负责集群的管理和协调工作,例如分配分片、故障检测、节点加入和退出等。
  6. 集群状态:集群的状态可以是健康的(Green)、部分健康的(Yellow)或者不健康的(Red),根据集群中分片的分布和副本的状态来判断。
  7. 动态扩展:集群可以根据需要动态扩展,可以增加节点、增加分片副本或者增加集群中的分片数量。

 

6、分片(Shard)与副本(Replica)

在 Elasticsearch 中,分片(Shard)副本(Replica)是两个重要的概念,它们在集群中起着不同的作用。

分片(Shard):

  • 分片是 Elasticsearch 中存储数据的基本单位,每个索引(Index)都被分成多个分片,每个分片是一个独立的 Lucene 索引。
  • 分片的数量在索引创建时就确定了,一旦确定就不能修改。默认情况下,每个索引会被分配 5 个主分片(Primary Shard),可以通过配置来修改。
  • 分片的主要作用是实现数据的分布和并行处理。通过将索引数据分成多个分片存储在不同的节点上,可以提高搜索和索引操作的并发性和吞吐量。

副本(Replica):

  • 副本是分片的拷贝,每个分片可以有多个副本。副本的数量在索引创建时可以指定,也可以后续动态修改。
  • 副本的主要作用是提高数据的可用性和容错性。当某个节点上的分片不可用时,集群可以从其它节点上的副本中提供服务,确保数据的完整性和可用性。
  • 默认情况下,每个分片会有一个副本,可以通过配置来修改副本的数量。副本的数量可以根据集群的规模、性能需求和容错需求来灵活调整。

7、Elasticsearch与MySQL的对应关系

在 MySQL 中,表(Table)用于存储数据记录,而在 Elasticsearch 中,索引(Index)用于存储文档。一个索引可以看作是 MySQL 中的表,而文档则是表中的行。

类比关系如下:

  • MySQL 中的表(Table)对应于 Elasticsearch 中的索引(Index)。
  • MySQL 中的行(Row)对应于 Elasticsearch 中的文档(Document)。
  • MySQL 中的字段(Field)对应于 Elasticsearch 中的字段(Field)。

   

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于ELK的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

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

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

相关文章

AlphaFold3(AF3)简单介绍:预测各种生物分子结构和它们之间相互作用的深度学习模型

参考: 文章地址: https://www.nature.com/articles/s41586-024-07487-w https://blog.google/technology/ai/google-deepmind-isomorphic-alphafold-3-ai-model/ AlphaFold3体验官网: https://golgi.sandbox.google.com/ 《Accurate structure prediction of biomolecula…

xxe漏洞漏洞详解

XXE漏洞概念 XXE(XML External Entity Injection) XML外部实体注入。 重点: XML 外部实体 注入 这三部分搞清楚 XML是一种类似于HTML(超文本标记语言)的可扩展标记语言,是用于标记电子文件使其具有结构性 的标记语言,可…

Github 2024-05-10 Java开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10C++项目2JavaGuide - Java 程序员学习和面试指南 创建周期:2118 天开发语言:Java协议类型:Apache License 2.0Star数量:140773 个…

队列和二叉树

本文主要探讨队列和二叉树的相关知识。 队列 队列结构:队头指针指向队头元素,队尾指针指向队尾元素(链表形式或数组形式) 队列特特点:先进先出,对头插入,队尾出队 双端队列:对头队尾都可插入和出队 二叉树 二叉树:包含根节点和子节点,一个三角组内…

CSS基础(CSS导入方式、选择器、属性)

层叠样式表(Cascading Style Sheets,缩写为 CSS)是一种样式表语言,用来描述 HTML 或 XML(包括如 SVG、MathML 或 XHTML 之类的 XML 分支语言)文档的呈现方式。CSS 描述了在屏幕、纸质、音频等其他媒体上的元…

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…

jenkins+gitlab+sonar自由风格项目配置

新建项目&基本配置 gitlab侧配置 sonar.projectKeytest_sonar sonar.projectNametest_sonar sonar.projectVersion1.0 sonar.sources. sonar.exclusionssrc/layout/** sonar.sourceEncodingUTF-8 sonar.nodejs.executable/app/nodejs/node-v16.20.2-linux-x64/bin/node配置…

pgsql查看指定模式的存储过程

pgsql查看指定模式的存储过程 在 PostgreSQL 中,如果你想要查看指定模式的存储过程(也称为函数),你可以使用 \df 或 \df 命令在 psql 命令行工具中,或者使用 SQL 查询来从 pg_catalog 系统模式中查询。 \df命令行查询…

Linux 中 POSIX 互斥信号量(互斥锁)的使用

目录 一、互斥锁的介绍二、使用方法三、测试代码 一、互斥锁的介绍 在Linux系统中,特别是在ARM架构的嵌入式系统中,互斥量(Mutex)用于保护共享资源不被多个线程或任务同时访问,从而防止数据竞争和不一致性。 POSIX 互斥…

旅游组团奖励标准,申报条件!利川市旅游组团奖励办法

利川市旅游组团奖励有哪些?关于利川市旅游组团奖励标准,申报条件整理如下: 第一条根据《湖北省人民政府办公厅印发关于更好服务市场主体推动经济稳健发展若干政策措施的通知》(鄂政办发〔2022〕54号)、《恩施州人民政府…

一个完整性能测试流程(非常详细)零基础入门到精通,收藏这一篇就够了

一、性能测试流程规范化的意义 规范化的性能测试流程能帮助测试发现潜在的性能问题和瓶颈,也能确保性能测试的可重复性和可比性。 同时可以帮助确定系统的容量,降低风险及维护成本,提高用户体验和满意度。 二、性能测试流程 一&#xff09…

linux高性能服务器--Ngix内存池简单实现

文章目录 内存模型:流程图内存对齐code 内存模型: 流程图 内存对齐 对齐计算 要分配一个以指定大小对齐的内存,可以使用如下公式: 假设要分配大小为n,对齐方式为x,那么 size(n(x-1)) & (~(x-1))。 举个…

发表博客之:gemm/threadblock/threadblock_swizzle.h 文件夹讲解,cutlass深入讲解

文章目录 [发表博客之:gemm/threadblock/threadblock_swizzle.h 文件夹讲解,cutlass深入讲解](https://cyj666.blog.csdn.net/article/details/138514145)先来看一下最简单的struct GemmIdentityThreadblockSwizzle结构体 发表博客之:gemm/th…

InfiniGate自研网关实现四

13.服务发现组件搭建和注册网关连接 以封装 api-gateway-core 为目的,搭建 SpringBoot Starter 组件,用于服务注册发现的相关内容处理。 这里最大的目的在于搭建起用于封装网关算力服务的 api-gateway-core 系统,提供网关服务注册发现能力。…

【Python技术】使用akshare、pandas高效复盘每日涨停板行业分析

作为一个程序员宝爸,每天的时间很宝贵,工作之余除了辅导孩子作业,就是补充睡眠。 怎么快速高效的进行当天A股涨停板的复盘,便于第二天的跟踪。这里简单写个示例, 获取当天连涨数排序,以及所属行业排序。 …

ICode国际青少年编程竞赛- Python-2级训练场-迷宫

ICode国际青少年编程竞赛- Python-2级训练场-迷宫 1、 Dev.step(3) Dev.turnLeft() for i in range(2):Dev.step(4)Dev.turnRight() for i in range(2):Dev.step(2)Dev.turnLeft() Dev.step(3) Dev.step(-9)2、 Dev.step(3) Dev.turnRight() Dev.step(2) Dev.turnLeft() for i …

TCP及IP协议

TCP协议的传输是可靠的,而UDP协议的传输“尽力而为” TCP传输可靠性———确认,重传,排序,流控。 流控:滑动窗口机制 TTL--- 数据包每经过一个路由器的转发,他的TTL值将减1,当一个数据包中的T…

01-01-11

1、day11作业 使用的代码 #include<stdio.h> #include<stdlib.h> int main() {int i;//申请多大的空间scanf("%d", &i);char* p (char*)malloc(i);//不进行强制类型转换&#xff0c;会产生警告char c;scanf("%c", &c);//清空上面申请…

AutoDL服务器远程桌面

文章目录 1.安装VNC和必要的一些图形显式库:2.SSH隧道2.1.本地安装openssh服务器2.2.服务开启2.3.显示当前安装的 SSH 版本信息2.3.设置一个 SSH 隧道 注意3.VNC Viewer客户端登录4.测试5.参考 VNC&#xff08;Virtual Network Computing &#xff09;是一种图形化的桌面共享协…

python实现背单词程序

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 背单词是学习英语的一个重要环节,它有很多好处,以下是其中一些主要的好处: 提高词汇量