Skip to content

初识 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。