乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 全文搜索与Elasticsearch概述

    • 全文搜索与搜索引擎概述
    • Elasticsearch 与 Lucene 的关系
    • Elasticsearch 核心架构
  • 安装与快速上手

    • 安装 Elasticsearch
    • 快速上手
  • 索引、文档与映射

    • 索引
    • 文档与 CRUD
    • 元数据字段
    • 字段映射
    • 动态映射
    • Reindex 操作
  • 文本分析与分词

    • 倒排索引的构建与原理
    • 分词器组成
    • IK 分词器与自定义词典
    • 近实时搜索原理
    • Ingest Pipeline 数据预处理
  • 搜索基础(Query DSL)

    • match 查询
    • multi_match 多字段查询
    • match_phrase 短语匹配
    • term 与 terms 查询
    • range 范围查询
    • bool 查询
    • 高亮显示与分页
    • 深度分页与遍历
  • 相关性评分与排序

    • BM25 相关性评分
    • 排序与自定义评分
    • Painless 脚本基础
  • 聚合分析(Aggregations)

    • 指标聚合
    • 桶聚合
    • 管道聚合
  • 分布式集群原理

    • 节点与角色
    • 分片与副本
    • 路由
    • 选举与脑裂
    • 快照与恢复
  • 数据建模与最佳实践

    • 索引设计原则与模板
    • 嵌套对象与父子文档
  • 性能优化与运维监控

    • 写入性能优化
    • 搜索性能优化
    • ILM 索引生命周期管理
    • 集群监控与故障排查
  • 面试考点与实战场景

    • 实战案例:课程搜索引擎
    • Elasticsearch 面试考点精选

Elasticsearch 核心架构

本章定位:从高空俯瞰 Elasticsearch 的核心概念:Node、Index、Shard、Replica、Cluster,建立对 ES 分布式架构的全局认知。


定义与作用

Elasticsearch 的架构围绕四个核心概念展开:

  • Node(节点):一个运行中的 ES 实例
  • Index(索引):一组具有相似特征的文档集合(类比数据库的表)
  • Shard(分片):索引的物理子集,是 ES 并行工作的最小单元
  • Replica(副本):主分片的完整拷贝,提供高可用和读扩展

核心原理:节点、索引与分片的层级关系


完整示例:飞翔科技的学生数据架构

场景一:白歌设计 students 索引

白歌为飞翔科技设计学生管理系统的索引架构:

# 创建索引:3 个主分片 + 1 个副本
PUT /students
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name":     { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
      "province": { "type": "keyword" },
      "major":    { "type": "text", "fields": { "keyword": { "type": "keyword" } } },
      "score":    { "type": "integer" },
      "gpa":      { "type": "float" },
      "credits":  { "type": "integer" },
      "enrollment": { "type": "date" }
    }
  }
}

场景二:集群部署架构

# 3 节点集群配置
# node-1: Master + Data
node.roles: [master, data]

# node-2: Data Only
node.roles: [data]

# node-3: Data Only
node.roles: [data]

易错场景与面试考点

反例一:索引与数据库表的类比陷阱

❌ 错误类比:ES 的 Index = MySQL 的 Table(完全等同)
✓ 正确理解:Index 在逻辑上类似 Table(存同一类文档),但物理上被切割为多个 Shard,
   每个 Shard 本质上是一个 Lucene 实例,分布在不同的 Node 上。这和 MySQL 的单表
   存储引擎文件完全不同。

面试高频题

Q1:ES 中 Index、Shard、Segment 三者的关系?

Index 是逻辑概念,一个 Index 包含 1~N 个 Shard。Shard 是物理存储单元,每个 Shard 是一个 Lucene 实例。Lucene 实例内部由多个不可变的 Segment 文件组成。写入 → 先到内存 Buffer → Refresh 生成 Segment → Flush 持久化。


小结

ES 架构的四层概念:Cluster → Node → Index → Shard → Segment。节点是运行实例,索引是逻辑容器,分片是物理存储单元,副本提供冗余。下一节深入到全文搜索的基本概念。

上一页
Elasticsearch 与 Lucene 的关系