基础概念
Index(索引)
类似于关系型数据库中的数据库,是具有相似特征的文档集合。索引名称必须小写。
Document(文档)
索引中的单条记录,以JSON格式存储。文档是可被索引的基础信息单元。
Type(类型)
7.x版本已废弃,8.x版本完全移除。一个索引只能有一种文档类型。
Mapping(映射)
定义文档字段的类型和属性,类似于数据库的表结构定义。
Node(节点)
集群中的单个服务器实例,存储数据并参与索引和搜索。
Cluster(集群)
一个或多个节点的集合,共同存储数据并提供搜索功能。
Shard(分片)
索引被分割成的多个部分,分布在不同节点上,实现水平扩展。
Replica(副本)
分片的复制,提供高可用性和故障转移,也可提高搜索性能。
┌─────────────────────────────────────────────────────────┐
│ Cluster(集群) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Index(索引) │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Type(类型) │ │ │
│ │ │ ┌─────────────────────────────────┐ │ │ │
│ │ │ │ Document(文档) │ │ │ │
│ │ │ │ { │ │ │ │
│ │ │ │ "field1": "value1", │ │ │ │
│ │ │ │ "field2": "value2" │ │ │ │
│ │ │ │ } │ │ │ │
│ │ │ └─────────────────────────────────┘ │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ Primary Shard 1 │ Primary Shard 2 │ Replica │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
1
与关系型数据库对比
理解Elasticsearch与传统数据库的对应关系
关系型数据库 Elasticsearch ───────────────────────────────────────── Database → Index(索引) Table → Type(已废弃) Row → Document(文档) Column → Field(字段) Schema → Mapping(映射) SQL → Query DSL Index → 所有字段默认索引
2
倒排索引原理
Elasticsearch使用倒排索引实现快速全文搜索
倒排索引概念
- 正向索引:文档 → 词汇
- 倒排索引:词汇 → 文档列表
- 支持快速的关键词查找
- 自动维护词频、位置等信息
# 示例文档 Doc1: "Elasticsearch is powerful" Doc2: "Elasticsearch is fast" Doc3: "Search is easy" # 倒排索引结构 Term Doc IDs ──────────────────────── elasticsearch [1, 2] is [1, 2, 3] powerful [1] fast [2] search [3] easy [3] # 搜索 "elasticsearch" → 立即返回 Doc1, Doc2
3
节点角色
Elasticsearch节点的不同角色分工
# Master Node(主节点) - 管理集群状态 - 负责创建/删除索引 - 分配分片到节点 - 建议:3个专用主节点(防止脑裂) # Data Node(数据节点) - 存储数据分片 - 执行CRUD操作 - 执行搜索和聚合 - 需要大量磁盘和内存 # Ingest Node(摄取节点) - 预处理文档数据 - 执行管道转换 - 减轻数据节点负担 # Coordinating Node(协调节点) - 接收客户端请求 - 分发到数据节点 - 聚合返回结果 - 负载均衡作用