第一章:Elasticsearch 简介
了解 Elasticsearch 的发展历史、核心特性、架构设计以及典型应用场景。
最后更新: 2024-01-15
页面目录
第一章:Elasticsearch 简介
1.1 什么是 Elasticsearch
Elasticsearch(简称 ES)是一个基于 Lucene 构建的开源分布式搜索和分析引擎,由 Shay Banon 于 2010 年创建。它提供了全文搜索、结构化搜索、分析以及这三种能力的组合,广泛应用于日志分析、安全分析、业务搜索等场景。
核心特性
- 分布式架构:天然支持横向扩展,可处理 PB 级数据
- 实时性:数据写入后几乎即时可被搜索
- 全文搜索:基于 Lucene 的强大全文检索能力
- RESTful API:通过 HTTP/JSON 接口操作
- 高可用:支持副本机制,自动故障转移
- 多租户:支持多索引、多命名空间
1.2 Elasticsearch 的发展历程
| 年份 | 版本 | 重要特性 |
|---|---|---|
| 2010 | 0.4.0 | 首次发布,基于 Lucene 3.x |
| 2012 | 0.20.0 | 支持实时搜索 |
| 2014 | 1.0.0 | 正式发布,稳定 API |
| 2015 | 2.0.0 | 聚合框架成熟 |
| 2017 | 6.0.0 | 跨集群搜索、SQL 支持 |
| 2021 | 8.0.0 | 默认安全、安全强化 |
1.3 核心概念
1.3.1 索引(Index)
索引是文档的集合,相当于关系型数据库中的数据库概念。每个索引都有自己的映射(Mapping),定义了文档的结构和字段类型。
{
"index": "products",
"mappings": {
"properties": {
"name": { "type": "text" },
"price": { "type": "float" },
"category": { "type": "keyword" }
}
}
}
1.3.2 文档(Document)
文档是 Elasticsearch 中的基本数据单元,以 JSON 格式存储,相当于关系型数据库中的行。
{
"_index": "products",
"_id": "1",
"_source": {
"name": "iPhone 15",
"price": 7999.00,
"category": "electronics",
"tags": ["手机", "苹果", "5G"]
}
}
1.3.3 节点(Node)
节点是 Elasticsearch 的运行实例,每个节点都有唯一的名称。
| 节点类型 | 说明 |
|---|---|
| Master 节点 | 负责集群管理、索引创建删除、分片分配 |
| Data 节点 | 存储数据、执行查询和聚合 |
| Ingest 节点 | 预处理文档(管道处理) |
| Coordinating 节点 | 转发请求、汇总结果 |
1.3.4 分片(Shard)
分片是索引的水平拆分单元,分为主分片和副本分片。
┌─────────────────────────────────────────────────┐
│ Index │
├─────────────────────────────────────────────────┤
│ Primary Shard 0 │ Primary Shard 1 │ Shard 2 │
│ (Node 1) │ (Node 2) │ (Node 3) │
├───────────────────┼──────────────────┼──────────┤
│ Replica Shard 0 │ Replica Shard 1 │ Replica │
│ (Node 2) │ (Node 3) │ (Node 1) │
└─────────────────────────────────────────────────┘
1.4 Elasticsearch 架构
┌─────────────────────────────────────────────────────────┐
│ Client (Kibana/APP) │
└─────────────────────────┬───────────────────────────────┘
│ REST API
┌─────────────────────────▼───────────────────────────────┐
│ Coordinating Node │
│ (请求路由、结果聚合) │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│Master │ │Data │ │Data │
│Node │◄───────►│Node 1 │◄───────►│Node 2 │
│ │ │ Shard 0 │ │ Shard 1 │
└─────────┘ └─────────┘ └─────────┘
1.5 应用场景
1.5.1 全文搜索
Elasticsearch 最典型的应用场景,提供强大的全文检索能力:
- 电商搜索:商品名称、描述、属性的全文搜索
- 站内搜索:文档、问答、论坛内容搜索
- 智能推荐:基于文本相似度的推荐
1.5.2 日志分析(ELK Stack)
Logstash ──► Elasticsearch ◄── Kibana
│ │
└──────► Kafka ──────────────────┘
(可选缓冲层)
- 收集:Logstash/Filebeat 采集日志
- 存储:Elasticsearch 索引存储
- 可视化:Kibana 图表展示
1.5.3 监控分析
- 基础设施监控
- 应用性能监控(APM)
- 安全信息与事件管理(SIEM)
1.6 与其他技术对比
Elasticsearch vs 关系型数据库
| 概念 | 关系型数据库 | Elasticsearch |
|---|---|---|
| 库 | Database | Index |
| 表 | Table | Index (已废弃 Type) |
| 行 | Row | Document |
| 列 | Column | Field |
| 索引 | Index | Mapping |
| SQL | SELECT | Query DSL |
Elasticsearch vs Solr
| 特性 | Elasticsearch | Solr |
|---|---|---|
| 分布式 | 原生支持 | 需要 SolrCloud |
| 部署 | 简单 | 较复杂 |
| 实时性 | 准实时 | 依赖缓存 |
| 社区 | 活跃 | Apache 官方 |
| 易用性 | 友好 | 一般 |
1.7 技术栈概览
Elasticsearch 通常与以下组件配合使用,形成完整的解决方案:
| 组件 | 用途 |
|---|---|
| Elasticsearch | 核心搜索引擎和数据分析引擎 |
| Logstash | 日志收集、过滤、转换 |
| Beats | 轻量级数据采集器 |
| Kibana | 数据可视化和管理界面 |
| Elastic Stack | 上述组件的完整集合 |
1.8 总结
本章介绍了 Elasticsearch 的基本概念、架构特点和应用场景。作为一个功能强大的分布式搜索和分析引擎,Elasticsearch 已经成为现代数据平台不可或缺的一部分。接下来的章节将深入学习 Elasticsearch 的安装部署和核心概念。