Appearance
初识 Elasticsearch
什么是 Elasticsearch?
Elasticsearch(简称 ES)是一个分布式搜索与分析引擎,基于 Apache Lucene 构建,对外提供 RESTful API。它擅长全文检索、近实时搜索和结构化数据的统计分析,常用于日志分析、站内搜索、监控指标和推荐系统等场景。
和关系型数据库的对比
为了便于理解,可以粗略类比:
| 关系型数据库 | Elasticsearch |
|---|---|
| 数据库(Database) | 可理解为同一集群下的多个索引 |
| 表(Table) | 索引(Index) |
| 行(Row) | 文档(Document) |
| 列(Column) | 字段(Field) |
| 表结构(Schema) | 映射(Mapping) |
ES 没有“表结构”的强约束:文档是 JSON,不同文档可以有不同字段,字段类型由映射定义或由 ES 自动推断(动态映射)。
为什么选择 Elasticsearch?
- 全文检索:对文本分词、建倒排索引,支持模糊匹配、相关度排序(_score)。
- 近实时:写入后通常在 1 秒内可被搜索到(可配置)。
- 分布式、高可用:数据分片(Shard)存储,可配置副本(Replica),支持水平扩展。
- 丰富的数据类型与聚合:支持数值、日期、地理、嵌套等类型,以及各种桶聚合、指标聚合。
典型使用场景
- 日志分析:ELK(Elasticsearch + Logstash + Kibana)或 Beats 采集日志,在 ES 中检索与统计。
- 站内搜索:商品、文章、用户等的关键词搜索、筛选、排序。
- 监控与指标:时序数据存储与聚合(需注意索引设计与生命周期)。
- 推荐与画像:基于标签、行为的检索与聚合分析。
核心概念一览(先混个脸熟)
| 概念 | 说明 |
|---|---|
| 索引(Index) | 类似“表”,是文档的集合,具有唯一名称(小写)。 |
| 文档(Document) | 索引中的一条数据,JSON 格式,有唯一 _id。 |
| 映射(Mapping) | 定义字段类型、是否分词、是否存储等,类似表结构。 |
| 分片(Shard) | 索引在物理上被拆成多个分片,分布在不同节点,便于扩展。 |
| 副本(Replica) | 每个主分片可有零个或多个副本,用于高可用与读负载分担。 |
| 集群(Cluster) | 由一个或多个节点组成,共同持有全部数据。 |
| 节点(Node) | 集群中的一台 ES 实例,可扮演主节点、数据节点、协调节点等角色。 |
后续章节会逐步展开这些概念和用法。
Elastic Stack 简介
Elasticsearch 常与以下组件一起使用,合称 Elastic Stack(原 ELK Stack):
| 组件 | 作用 |
|---|---|
| Elasticsearch | 存储、检索、聚合数据。 |
| Kibana | 可视化界面:Dev Tools 发请求、Discover 查数据、Dashboard 做图表等。 |
| Logstash | 服务端数据处理管道:采集、转换、输出到 ES 等。 |
| Beats | 轻量级采集器(如 Filebeat 收日志、Metricbeat 收指标),可直接或经 Logstash 写入 ES。 |
本教程以 Elasticsearch + Kibana 为主:在 Kibana 的 Dev Tools 里用 REST API 操作 ES,即可完成绝大部分学习。熟悉后可按需再学 Logstash / Beats。