核心术语:索引、文档、映射、分片与副本|Elasticsearch 七日笔记 02
学习目标
- 掌握 Elasticsearch 的核心术语(索引、文档、映射、分片、副本)及其在数据存储和检索中的功能。
Elasticsearch 的核心概念是理解其工作机制的基础,以下是五个关键术语的详细说明。
索引(Index)
- 定义:
- 索引是文档的逻辑容器,类似于关系型数据库中的“表”。
- 它是 ES 中数据的顶级组织单位,每个索引代表一类数据。
- 特点:
- 名称必须小写,不能包含特殊字符(如
#、%)。 - 一个索引通常对应一个业务场景,例如
users(用户数据)、products(商品数据)。
- 名称必须小写,不能包含特殊字符(如
- 内部结构:
- 索引由多个分片组成,每个分片是一个独立的 Lucene 索引。
- 示例:
- 创建一个名为
users的索引:PUT /users - 结果:ES 会自动创建一个空的索引,等待文档写入。
- 创建一个名为
- 命名建议:
- 使用有意义的名称,如
logs-2025-02(带日期的日志索引)。
- 使用有意义的名称,如
文档(Document)
- 定义:
- 文档是 ES 中的最小数据单元,以 JSON 格式存储,类似于数据库表中的一行。
- 每个文档属于一个索引,并有一个唯一标识符(ID)。
- 结构:
- 由多个字段(Field)组成,例如:
{"name": "Alice", "age": 25, "email": "alice@example.com"}
- 由多个字段(Field)组成,例如:
- 特点:
- ID 可以手动指定(如
1),也可以由 ES 自动生成(如随机 UUID)。 - 文档是动态的,可随时添加或修改字段。
- ID 可以手动指定(如
- 存储方式:
- ES 使用倒排索引存储文档字段,便于快速检索。
- 示例:
- 插入一个文档:
PUT /users/_doc/1 {"name": "Alice", "age": 25} - 查询文档:
返回:GET /users/_doc/1{ "_index": "users", "_id": "1", "_source": {"name": "Alice", "age": 25} }
- 插入一个文档:
映射(Mapping)
- 定义:
- 映射是索引中字段的类型定义和索引规则,类似于数据库的表结构。
- 它告诉 ES 如何处理每个字段(如分词、存储、排序)。
- 字段类型:
text:分词文本,适合全文搜索。- 示例:“Hello World” ->
["hello", "world"]。
- 示例:“Hello World” ->
keyword:精确值,适合排序和聚合。- 示例:“Hello World” ->
"Hello World"。
- 示例:“Hello World” ->
integer、float:数值类型。date:日期类型,如"2025-02-27T10:00:00"。
- 动态映射:
- ES 会根据写入的数据自动推断类型,例如:
"25"->integer"2025-02-27"->date
- ES 会根据写入的数据自动推断类型,例如:
- 手动映射:
- 示例:
PUT /users { "mappings": { "properties": { "name": {"type": "text"}, "age": {"type": "integer"} } } }
- 示例:
- 作用:
- 优化搜索性能,避免类型推断错误(如字符串误判为数字)。
- 注意:
- 一旦字段类型定义,不能轻易修改,需重建索引。
分片(Shards)
- 定义:
- 分片是将索引分割成多个部分的机制,每个分片是一个独立的 Lucene 索引。
- ES 通过分片实现数据的分布式存储和并行查询。
- 类型:
- 主分片(Primary Shard):
- 存储原始数据,默认 5 个。
- 负责写入操作。
- 副本分片(Replica Shard):
- 主分片的备份,默认 1 个副本。
- 负责读操作和容错。
- 主分片(Primary Shard):
- 作用:
- 性能:多个分片并行处理查询。
- 容错:副本分片确保数据冗余。
- 配置:
- 示例:
PUT /users { "settings": { "number_of_shards": 1, "number_of_replicas": 0 } } - 单机测试时,建议 1 主分片,0 副本。
- 示例:
- 分片数量建议:
- 根据数据量和节点数调整,过多分片增加管理开销,过少降低并行性。
副本(Replicas)
- 定义:
- 副本是主分片的冗余副本,用于提高数据的高可用性。
- 特点:
- 每个主分片可以有多个副本,分布在不同节点上。
- 副本可处理读请求,提升查询性能。
- 作用:
- 高可用:主分片所在节点宕机时,副本接管。
- 负载均衡:分担查询压力。
- 示例:
- 一个索引有 1 个主分片和 1 个副本,总共 2 个分片。
- 配置:
- 单机时可设为 0,集群时建议至少 1。
术语之间的关系
- 索引包含多个文档。
- 索引被分成多个主分片,每个主分片可以有多个副本分片。
- 映射定义了文档字段的处理方式。
- 示例场景:
- 索引
users有 1000 个文档,配置为 2 个主分片和 1 个副本,总共 4 个分片(2 主 + 2 副本)。 - 每个分片存储约 500 个文档,副本分片同步主分片数据。
- 索引
学习建议
- 理解分布式:
- 思考分片和副本如何实现高可用和性能提升。
- 画一个简单的集群图,标注主分片和副本分片。
本文是《Elasticsearch 七日笔记》系列的第 2 篇,对应第 1 天的学习内容。
