当前位置: 首页 > news >正文

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 的基础。

http://www.xdnf.cn/news/1343521.html

相关文章:

  • 【机器学习深度学习】大模型分布式推理概述:从显存困境到高并发挑战的解决方案
  • 用sftp协议实现对文件的上传下载
  • 高压、高功率时代,飞机电气系统如何保障安全?
  • PDF文档安全升级:三招实现文本转曲线(防篡改+高清输出)
  • 一分钟docker部署onlyoffice 在线预览word pdf excel...
  • 嵌入式第三十五天(网络编程)
  • week3-[二维数组]最大列
  • WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9
  • Windows应急响应一般思路(二)
  • 【基础算法】离散化
  • 驱动(二)uboot编译+内核编译+文件系统
  • AI 绘画争议背后:版权归属、艺术原创性与技术美学的三方博弈
  • 排序---插入排序
  • Oracle APEX 经典报表中的Checkbox
  • 使用EasyExcel自定义导出表格
  • 开发二手车小程序时,如何确保信息的真实性和可靠性?
  • C#:窗体间传值
  • 计数组合学7.20(平面分拆与RSK算法)
  • 亚矩阵云手机:亚马逊第三方店铺多账号安全合规运营的核心技术支撑
  • Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具
  • 2026年计算机毕设推荐:基于大数据的慢性肾病数据可视化分析系统技术选型指南【Hadoop、spark、python】
  • 决策树基础学习教育第一课:从概念到核心原理
  • 【Canvas与旗帜】美国星条旗玻璃光圆饼
  • Lua脚本如何执行主程序的C函数
  • ODYSSEY:开放世界四足机器人的探索与操控,助力长范围任务
  • Node.js 开发 JavaScript SDK 包的完整指南(AI)
  • 基于Node.js服务端的社区报修管理系统/基于express的在线报修管理系统
  • 数据工程师——ETL
  • FastText 词向量全景指南(没那么全)
  • 如何创建一个Cloudfalare worker项目?