ElasticSearch深入解析(二):核心概念

文章目录

  • 一、倒排索引和全文检索
    • [1. 倒排索引](#1. 倒排索引)
    • [2. 全文检索](#2. 全文检索)
  • 二、ElasticSearch的核心概念
    • [1. 集群](#1. 集群)
    • [2. 节点](#2. 节点)
    • [3. 索引](#3. 索引)
    • [4. 分片](#4. 分片)
    • [5. 副本](#5. 副本)
    • [6. 文档](#6. 文档)
    • [7. 字段](#7. 字段)
    • [8. 映射](#8. 映射)
    • [9. 分词](#9. 分词)

一、倒排索引和全文检索

1. 倒排索引

倒排索引是ElasticSearch核心的数据结构,为高效的全文搜索提供了强大支持。

  • 主要由两部分组成:
    • 单词词典,即每个文档进行分词后的词项在去重后组成的集合;
    • 排列表记录了词项所在文档的文档列表、单词频率等信息。

倒排文件是倒排列表持久化存储的结果,通常保存在磁盘等存储设备上。

以下是倒排索引结构的说明:

docid代表文档ID,TF代表词频。以词项"chatgpt"为例,其对应的倒排索引(1:1)中前面的1代表文档ID,说明文档1中包含"chatgpt"词项;后面的1代表词频,说明"chatgpt"词项在文档1里出现了1次。实际的倒排列表存储的信息要比表2-2复杂,还会包括词项在文档中出现的位置等信息,以方便实现复杂检索。

有了倒排列表,当检索"chatgpt"时,就无须对逐个文档进行扫描,而可以借助倒排索引锁定ID为1、2、3、4的文档,实现以O(1)的时间复杂度快速召回数据,达到快速响应的目的。

2. 全文检索

全文检索的前提是待检索的数据已经索引化,当用户查询时能根据建立的倒排索引进行查找。衡量全文检索系统的关键指标是全面、准确和快速。

ElasticSearch的全文检索的特点如下:

  • 只处理文本,不处理语义;
  • 结果列表有相关度排序;
  • 支持高亮显示结果数据;
  • 原始的文本被切分为单个单词、短语或特殊标记后进行存储;
  • 给定词与它的变体(如近义词)会被折叠为一个词,如electrification和ectric、mice和mouse、"土豆"和"马铃薯"、"西红柿"和"番茄"等,每组词均被视为同一个词。(需要提前配置)

二、ElasticSearch的核心概念

1. 集群

集群是一组Elasticsearch节点的集合。节点根据用途不同会划分出不同的角色,且节点之间相互通信。Elasticsearch集群常用于处理大规模数据集,目的是实现容错和高可用。Elasticsearch集群需要一个唯一标识的集群名称来防止不必要的节点加入。

集群大小从单个节点到数千个节点不等,具体大小取决于实际业务场景。

2. 节点

节点是指一个Elasticsearch实例,更确切地说,它是一个Elasticsearch进程。节点可以部署到物理机或者虚拟机上。每当Elasticsearch启动时,节点就会开始运行。每个节点都有唯一标识的名称,在部署多节点集群环境的时候我们要注意不要写错节点名称。

3. 索引

索引是Elasticsearch中用于存储和管理相关数据的逻辑容器。索引可以看作数据库中的一个表,它包含了一组具有相似结构的文档。在Elasticsearch中,数据以JSON格式的文档存储在索引内。每个索引具有唯一的名称,以便在执行搜索、更新和删除操作时进行引用。索引的名称可以由用户自定义,但必须全部小写。

总之,索引是Elasticsearch中用于组织、存储和检索数据的一个核心概念。通过将数据划分为不同的索引,用户可以更有效地管理和查询相关数据。

4. 分片

在理解分片的概念之前,我们需要先明确引入分片的核心原因。假设存在一个包含海量文档的索引,其数据总量达到1TB,而当前集群仅有两个节点,每个节点的可用数据存储空间为512GB。显然,单个节点的硬件存储上限无法容纳整个索引,此时必须通过某种机制对索引数据进行拆分,否则将导致数据无法完整存储。分片机制正是为解决这类问题而设计------它通过将原始索引拆解为多个更小的子集,使每个子集能够适配单节点的存储限制。

  • 分片的本质与特性:

    • 逻辑独立的子索引 :每个分片本质上是一个完整且独立的Lucene索引,包含原始索引数据的一个子集。即使在单节点集群中,被分片的索引内任意文档也仅存储于某一个分片中(例如上图中的分片1~4、副本1~4)。
    • 功能完整性:每个分片可独立执行数据存储、检索等操作,如同一个"微型索引"。
  • 分片的工作机制:

    当处理涉及多个分片的查询时,Elasticsearch会自动完成以下流程:

    • 请求分发:将查询请求并行路由至所有相关分片;
    • 结果聚合:收集各分片的查询结果,合并后返回给用户。

对于应用程序而言,这一过程完全透明------开发者无需感知底层分片的分布逻辑或处理复杂度,只需关注业务层面的数据处理与用户交互。这种设计极大降低了使用门槛,使Elasticsearch既能支撑海量数据存储,又保持了接口的简洁性。

5. 副本

生产环境下,硬件随时可能发生故障。为了保证集群的容错性和高可用性、提高查询的吞吐率,Elasticsearch提供了复制数据的特性。分片可以被复制,被复制的分片称为"主分片"​,如上图中的主分片1~4;主分片的复制版本称为"副本分片"或简称为"副本"​,如上图中的副本1~4。创建索引时需要指定主分片,且主分片数一经指定就不支持动态更新了。而副本同样需要在创建索引时指定,每个分片可以有0或多个副本,副本数支持动态更新。当某主分片所在的数据节点不可用时,会导致主分片丢失现象,若短时间内不对此采取补救措施,集群会将该分片对应的副本提升为新的主分片。

注意:Elasticsearch 7.X版本之后,默认主分片数为1,副本分片数为1。

6. 文档

关系型数据库将数据以行或元组为单位存储在数据库表中,而Elasticsearch将数据以文档为单位存储在索引中。作为Elasticsearch的基本存储单元,文档是指存储在Elasticsearch索引中的JSON对象。文档中的数据由键值对构成。键是字段的名称,值是不同数据类型的字段。不同的数据类型包含但不限于字符串类型、数字类型、布尔类型、对象类型等。

7. 字段

字段是Elasticsearch中最小的单个数据单元,类似于关系型数据库表中的字段。一般实战项目前期的设计环节都是根据业务需求拆分、定义字段,并且敲定字段类型。与关系型数据库不同的是,Elasticsearch的一个字段可以设定两种或两种以上的数据类型,通过定义multi-field来灵活地满足复杂的业务需求。

8. 映射

映射类似于关系型数据库中的Schema,可以近似地理解为"表结构"​。

9. 分词

倒排索引的本质是使用户以O(1)的时间复杂度快速召回结果数据。而分词则是构建倒排索引的重要一环。在英文文本中,空格就是切分语句或短语的"屏障"​。但中文文本中则没有了这道"屏障"​,于是分词就变得就不那么简单,需要由专门的分词算法构建的分词器来实现。

相关推荐
Debug_TheWorld7 分钟前
Apache Flink 深度解析:流处理引擎的核心原理与生产实践指南
大数据·flink·apache
Debug_TheWorld16 分钟前
生产环境大数据平台权限管理
大数据
阿里云大数据AI技术2 小时前
通过阿里云Milvus与通义千问VL大模型,快速实现多模态搜索
大数据·云计算
用户199701080183 小时前
深入研究:Shopee商品详情API接口详解
大数据·爬虫·数据挖掘
Fanerma1213 小时前
来访登记二维码生成
大数据·安全
holly_交易系统3 小时前
如何开发一套TRS交易系统:架构设计、核心功能与风险控制
大数据·人工智能·软件工程·软件构建·开源软件
李菠菜4 小时前
常用Hadoop HDFS命令详解与实用指南
大数据·hadoop·hdfs
小橘快跑4 小时前
elasticsearch 查询检索
大数据·elasticsearch
QX_hao4 小时前
【Project】基于spark-App端口懂车帝数据采集与可视化
大数据·分布式·spark