Elasticsearch核心概念

Elasticsearch 的数据模型核心概念建立在面向文档和搜索优化的基础上,与传统关系型数据库有显著区别。以下是其最核心的概念及其相互关系:

  1. 文档 (Document)

    • 是什么? 数据的基本存储单元和搜索单元。类似于关系型数据库中的一行记录。
    • 形式: JSON 对象。包含一组键值对(字段和值),结构灵活,可以嵌套。
    • 关键特性:
      • 最小单位: 所有数据最终都存储在文档中。
      • 唯一标识: 每个文档在索引内有唯一的 _id
      • 可搜索: 文档的内容(字段值)是搜索的主要目标。
      • 模式灵活: 文档结构不需要预先严格定义(动态映射),但也可以根据需要定义严格的映射(显式映射)。
    • 类比: 关系型数据库中的 ROW
  2. 索引 (Index)

    • 是什么? 一组具有相似特性的文档的集合。这是 Elasticsearch 中最顶层的逻辑数据容器和组织单元。
    • 作用:
      • 分区容器: 将文档逻辑分组(例如,customer-index, product-index, logs-2023-index)。
      • 映射定义: 包含定义文档结构(字段名、类型、分析方式等)的映射(Mapping)。
      • 配置单元: 关联特定的设置(Settings),如分片数量、副本数量、刷新间隔等。
      • 搜索主要入口: 绝大多数搜索操作都是在特定索引(或索引模式)上执行的。
    • 关键特性:
      • 逻辑概念: 用户操作的主要入口点(CRUD、Search)。
      • 映射关联: 索引包含其文档的映射定义。
      • 设置关联: 索引关联其配置设置。
    • 类比: 关系型数据库中的 TABLE (最主要的类比,但功能更复杂强大)。 注意:ES 的索引同时承担了表定义(Schema)和表本身(数据容器)的角色。
  3. 映射 (Mapping)

    • 是什么? 定义文档的结构及其包含的字段如何被处理和索引的规则集合。相当于模式定义 (Schema Definition)。
    • 作用:
      • 字段定义: 指定文档中每个字段的名称。
      • 数据类型: 定义每个字段的数据类型(如 text, keyword, date, long, boolean, object, nested 等)。这是核心功能。
      • 索引方式: 控制字段是否应被索引(使其可搜索/聚合),以及如何被索引(如分词器、分析器等)。
      • 存储方式: 控制字段值是否应存储在 _source 之外(默认所有原始 JSON 都存储在 _source 字段)。
      • 其他属性:index_options(控制倒排索引存储哪些信息)、format(日期格式)、ignore_above(keyword 字段忽略超长值)等。
    • 关键特性:
      • 数据理解: 告诉 Elasticsearch 如何解释和处理文档中的数据。
      • 搜索/聚合基础: 字段的数据类型和索引方式极大地影响搜索行为、性能和聚合能力(例如,text 字段用于全文搜索,keyword 字段用于精确匹配、排序和聚合)。
      • 动态 vs 显式: 可以动态生成(Dynamic Mapping,即根据插入的第一个文档自动推断类型)或显式定义(Explicit Mapping,推荐做法)。
    • 类比: 关系型数据库中的 TABLE SCHEMA / DDL
  4. 类型 (Type) - 已淘汰 (Deprecated since 7.x, Removed in 8.x)

    • 历史背景: 在 Elasticsearch 6.x 及之前版本,一个索引内部可以包含多种"类型",每个类型有自己的映射,试图模拟关系型数据库中一个表内可以有不同类型的对象(如 user 类型和 blog_post 类型在同一个 social-media-index 中)。
    • 问题: 这种方式在底层实现上导致不同类型文档的字段映射混淆(字段冲突)和性能问题(同一索引内不同类型的数据特性差异太大)。
    • 现状: 从 Elasticsearch 7.x 开始弃用,8.x 中彻底移除。 最佳实践是每个索引只包含一种文档类型(即一种数据结构)。 如果需要不同的数据结构,应该创建不同的索引。
  5. 分片 (Shard)

    • 是什么? 索引的物理水平分区的子集。 一个索引存储的数据量可能非常大(TB/PB 级),超过单台机器的存储和处理能力。分片机制将索引的数据水平拆分成多个较小的部分(称为分片)。
    • 作用:
      • 横向扩展/并行处理: 允许数据和请求负载分布在集群的多个节点上,实现水平扩展,大幅提升存储容量、吞吐量和查询性能(并行执行查询)。这是 ES 处理海量数据的核心机制。
      • 操作单元: 文档的 CRUD 操作最终发生在某个具体的分片上。
    • 关键特性:
      • 主分片 (primary shard) :存储索引数据的主副本。负责处理索引(写入)请求。文档首先写入主分片。创建索引时指定数量且后续不可更改(除非重建索引)。决定索引的最大数据容量。
      • 副本分片 (replica shard):主分片的拷贝。提供数据冗余(高可用性,防止节点故障导致数据丢失)和提升查询吞吐量(读请求可以由主分片或副本分片处理)。
      • 分布: 分片(主分片和它的副本)被分配到集群的不同节点上。
      • 透明性: 对用户透明(用户操作索引,ES 内部处理分片路由)。
    • 类比: 关系型数据库中的水平分区(Partitioning),但更底层且是分布式核心。
  6. 节点 (Node)

    • 是什么? 运行中的 Elasticsearch 实例。 一个物理或虚拟服务器。
    • 作用: 存储数据、参与集群的索引和搜索操作。
    • 关键特性:
      • 集群成员: 多个节点组成一个集群 (Cluster) 。
      • 角色: 节点可以扮演不同角色(可配置):数据节点(存储分片和处理 CRUD / 搜索)、主节点(管理集群状态、索引创建/删除、节点加入/离开)、协调节点(转发请求、聚合结果)、Ingest 节点(预处理文档)等。
      • 分片宿主: 分片运行在节点上。一个节点可以存储多个分片(来自不同的索引)。
    • 类比: 关系型数据库集群中的一个数据库服务器实例。

核心概念的层级关系与工作流:

  1. 集群 (Cluster) :由一个或多个节点 (Node) 组成。
  2. 索引 (Index)
    • 创建在集群上(逻辑概念)。
    • 创建时需要配置:
      • 主分片 (Primary Shard) 的数量(决定数据容量上限)。
      • 副本分片 (Replica Shard) 的数量(决定冗余度和读吞吐量)。
      • 映射 (Mapping)(显式定义或依靠动态)。
    • 索引的数据会被物理拆分 成多个 分片 (Shard)
  3. 分片 (Shard)
    • 索引的主分片和副本分片是物理存储单元
    • 它们被分配到集群的不同节点 (Node) 上运行。
    • 每个分片本质上是一个独立的、功能完整的 Lucene 索引。
  4. 文档 (Document)
    • 被写入到某个具体的索引 (Index) 中。
    • ES 根据文档的 _id 和索引的分片规则,决定该文档应该存储在哪个主分片 (Primary Shard) 上。
    • 文档的结构和字段处理规则由该索引的映射 (Mapping) 定义。
  5. 搜索/查询
    • 用户向一个或多个索引 (Index) 发送请求。
    • 请求到达某个节点(通常是协调节点)。
    • 协调节点将请求广播 到所有相关的分片 (Shard) (主分片或其副本,分布在不同的节点 (Node) 上)。
    • 每个分片在本地执行搜索(在它存储的文档 (Document) 子集上),返回结果给协调节点。
    • 协调节点聚合所有分片的局部结果,进行排序、分页等处理,然后返回最终结果给用户。

总结关键点:

  • 文档 (JSON) 是数据的最小单位。
  • 索引 是文档的逻辑容器(类比表),定义了映射(schema)和设置。
  • 映射 定义了文档的结构和字段如何处理(字段名、数据类型、索引方式),对搜索和聚合至关重要。
  • 分片 是实现水平扩展、高并发和高可用的核心物理机制。
    • 主分片 处理写请求,决定数据容量。
    • 副本分片 提供冗余和提升读性能。
  • 节点 是运行 ES 的基础硬件/虚拟机单元,存储分片和处理请求。
  • 类型 (Type) 已被淘汰,现代 ES 中一个索引对应一种文档结构。
  • 倒排索引(Inverted Index) 是 Elasticsearch (基于 Lucene) 实现快速全文搜索 的底层数据结构。虽然它不是用户直接操作的顶层概念,但它是理解 ES 搜索为何高效的根基:
    • 它建立了从词项 (Term) 到包含该词项的文档列表的映射。
    • 搜索时,通过查找词项快速定位到相关文档 ID。

理解这些核心概念及其相互关系是有效使用、管理和优化 Elasticsearch 的基础。

相关推荐
计算机毕设残哥34 分钟前
大数据毕业设计推荐:基于Hadoop+Spark的手机信息分析系统完整方案
大数据·hadoop·课程设计
Hello.Reader1 小时前
Elasticsearch Rails 集成(elasticsearch-model / ActiveRecord)
大数据·elasticsearch·jenkins
TDengine (老段)3 小时前
TDengine IDMP 应用场景:微电网监控
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
8K超高清3 小时前
广播级讯道摄像机CCU后挂上的PGM、ENG、PROD音频旋钮是做什么用的?
大数据·人工智能·科技·数码相机·音视频·智能硬件
跨境卫士-小卓4 小时前
eBay新政深度解读:2025跨境交易规则重构与卖家应对策略
大数据·重构·跨境电商
PawSQL5 小时前
十年磨一剑!Apache Hive 性能优化演进全史(2013 - )
大数据·hive·性能优化
chenglin0165 小时前
ES_多表关联
java·前端·elasticsearch
IsPrisoner5 小时前
深入理解 Elasticsearch:从原理到实战的系统性解析
大数据·elasticsearch·搜索引擎
派可数据BI可视化6 小时前
解读商业智能BI,数据仓库中的元数据
大数据·数据仓库·数据分析·spark·商业智能bi