第一章: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 的安装部署和核心概念。