Elasticsearch四大核心概念为Index(逻辑数据容器)、Document(最小可索引单元)、Shard(物理分片,实现水平扩展)和Replica(主分片副本,保障高可用);各自职责明确且协同工作。

如果您在使用 Elasticsearch 时对数据组织方式、存储结构或高可用机制感到困惑,则很可能是由于未厘清 Index、Document、Shard 和 Replica 这四个基础构成单元之间的关系与职责。以下是针对这四项核心概念的逐项解析:
一、Index(索引)
Index 是 Elasticsearch 中逻辑上的数据容器,用于归类具有相似结构和用途的一组文档。它并非传统数据库中的“索引”(如 B+ 树索引),而更接近于关系型数据库中的“数据库”或 MongoDB 中的 “Collection”。每个 Index 有唯一名称,全部由小写字母、数字、连字符和下划线组成,且名称不可包含空格或大写字母。
1、使用 RESTful API 创建一个名为 products 的索引:
向 PUT /products 发送空 JSON 请求体。
2、为该索引显式定义映射(mapping),指定字段类型:
向 PUT /products/_mapping 提交包含 "title": {"type": "text"} 的 JSON 内容。
3、验证索引是否存在:
向 HEAD /products 发起请求,返回 200 表示存在,404 表示不存在。
二、Document(文档)
Document 是 Elasticsearch 中可被索引和搜索的最小数据单元,以 JSON 格式表示,等同于关系型数据库中的一行记录。每个 Document 必须属于某个 Index,且拥有唯一 ID;ID 可由系统自动生成(POST 请求),也可由客户端指定(PUT 请求)。Document 的字段值支持嵌套、数组及多种原生类型,其结构柔性但需符合所属 Index 的 mapping 约束。
1、向 products 索引中插入一条文档:
向 POST /products/_doc 提交 JSON 数据,例如 {"title": "Wireless Headphones", "price": 89.99}。
2、使用指定 ID 插入文档:
向 PUT /products/_doc/1001 提交相同结构的 JSON,此时 ID 固定为 1001。
3、根据 ID 检索该文档:
向 GET /products/_doc/1001 发起请求,响应体中将包含 _source 字段及其原始内容。
三、Shard(分片)
Shard 是 Index 在物理层面的分割单位,用于实现水平扩展与并行处理。每个 Index 默认被划分为 5 个主分片(Primary Shard),每个分片是一个独立的 Lucene 实例,拥有完整的索引与搜索能力。分片数量在索引创建时即被固定,不可直接修改;若需调整,必须重建索引。分片分布于集群各节点,使写入与查询负载得以分散。
1、创建索引时显式指定分片数:
向 PUT /logs 提交包含 "settings": {"number_of_shards": 3} 的 JSON。
2、查看某索引的分片分配情况:
访问 GET /logs/_cat/shards?v,输出中将列出每个 shard 的状态(STARTED/INITIALIZING)、所在节点及主副本标识。
3、确认当前节点承载的分片列表:
访问 GET /_cat/allocation?v,观察 shards 列数值,判断负载是否均衡。
四、Replica(副本)
Replica 是主分片(Primary Shard)的完整拷贝,用于保障数据冗余与服务连续性。每个主分片可配置 0 个或多个副本分片(Replica Shard),默认为 1。当主分片所在节点宕机时,Elasticsearch 会自动提升一个健康副本为新的主分片,从而维持读写能力。副本不承担写入压力,仅分担搜索请求,因此可动态增减数量以调节查询吞吐与容错等级。
1、创建索引时设置副本数:
向 PUT /metrics 提交包含 "settings": {"number_of_replicas": 2} 的 JSON。
2、运行时更新副本数量:
向 PUT /metrics/_settings 提交 {"number_of_replicas": 0},立即生效且无需重启。
3、检查副本健康状态:
访问 GET /_cluster/health?level=shards,关注响应中 unassigned_shards 是否为 0,以及各 shard 的 status 是否为 STARTED。

















