Appearance
核心概念
概述
Elasticsearch(ES)是一个基于Lucene的分布式搜索引擎,核心特点:
- 分布式:天然支持集群
- 全文搜索:强大的搜索能力
- 实时性:近实时索引和搜索
- RESTful:HTTP接口
架构组件
1. 集群(Cluster)
┌─────────────────────────────────────────┐
│ ES Cluster │
├─────────────────────────────────────────┤
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Node-1 │ │ Node-2 │ │ Node-3 │ │
│ │Master │ │ Data │ │ Data │ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘- 集群名(cluster.name)相同的所有节点
- 集群健康状态:green、yellow、red
2. 节点(Node)
| 节点类型 | 说明 |
|---|---|
| Master | 负责集群管理(创建/删除索引、分配分片) |
| Data | 存储数据,处理查询 |
| Ingest | 数据预处理(pipeline) |
| Coordinating | 协调请求转发,合并结果 |
配置示例:
yaml
node.master: true
node.data: true
node.ingest: true3. 索引(Index)
Index = 逻辑命名空间
↑
Shard = 物理存储单元(Lucene索引)
↑
Segment = 实际存储文件- 索引是文档的逻辑容器
- 索引名必须小写
- 每个索引有主分片和副本分片
4. 文档(Document)
json
{
"_index": "products",
"_id": "1",
"_source": {
"name": "iPhone 15",
"price": 999,
"category": "phone"
}
}- JSON格式的基本单位
- _id唯一标识文档
- _source存储原始数据
面试考点
Q: ES vs MySQL?
| MySQL | ES |
|---|---|
| 数据库 | 索引 |
| 表 | 类型(已废弃) |
| 行 | 文档 |
| 列 | 字段 |
| 索引 | 倒排索引 |
Q: ES如何保证高可用?
- 多节点集群
- 主副分片副本
- Master选举
- 故障自动转移
Q: 为什么ES搜索快?
- 倒排索引
- 分布式并行查询
- Segment检索
- 缓存机制
