Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

ElasticSearch 核心概念

内容:是什么 -> 怎么存 -> 怎么查 -> 怎么扩 -> 为什么这样设计。

一、Elasticsearch 是什么?

Elasticsearch 是一个基于 Lucene 的分布式搜索与分析引擎, 用于 全文检索、结构化查询、聚合分析、日志与指标分析。

核心特点

  • 分布式(天然集群)
  • Near Real Time(准实时)
  • Schema-on-write(写入时建结构)
  • 面向文档(JSON)
  • 高可扩展、高并发读

二、ES 的数据模型(最核心)

Index(索引)
 └── Shard(分片)
     └── Segment(段)
         └── Document(文档)
             └── Field(字段)

1️⃣ Index(索引)

  • 类似 数据库
  • 一类数据的集合
  • mapping 在这里定义

index = 表结构 + 数据集合

2️⃣ Document(文档)

  • ES 的最小数据单元
  • JSON 格式
  • 类似一行记录
{
  "id": 1,
  "title": "ElasticSearch",
  "content": "全文检索引擎"
}

3️⃣ Field(字段)

  • 文档中的属性
  • 有类型(text / keyword / date / long)

三、Mapping(写入规则,重中之重)

Mapping 决定了数据如何被索引和搜索

常见字段类型

类型 用途
text 全文检索
keyword 精确匹配 / 聚合
long / integer 数值
date 时间
boolean 布尔
object / nested 对象

text vs keyword(必考)

对比 text keyword
是否分词
是否支持聚合
场景 搜索 过滤 / 排序

四、倒排索引(ES 的灵魂)

什么是倒排索引?

传统:

文档 -> 内容

倒排:

词 -> 文档列表

示例

文档 内容
doc1 I love ES
doc2 I love you

倒排索引:

I     -> doc1, doc2
love  -> doc1, doc2
ES    -> doc1
you   -> doc2

👉 搜索速度极快

五、分词器(Analyzer)

分词器组成

Character Filter -> Tokenizer -> Token Filter

常见分词器

分词器 说明
standard 默认
ik_smart 中文
ik_max_word 中文
keyword 不分词

六、Shard(分片,分布式基础)

1️⃣ 主分片 & 副本分片

  • Primary Shard:写入主分片
  • Replica Shard:提高可用性 & 读性能

写 -> 主分片 -> 同步到副本

2️⃣ 分片特点(非常重要)

  • 分片数创建后不能改
  • 分片是最小调度单位
  • 查询是 shard 级并行

3️⃣ 分片经验值

指标 建议
单分片大小 10~50GB
分片总数 ≤ 节点 × 2~3

七、写入流程(原理题必考)

Client
协调节点
Primary Shard
Replica Shard
Refresh(生成 segment)

关键点

  • 写入成功 ≠ 可搜索
  • refresh 后才能被查到
  • 默认 1s refresh

八、查询流程

Client
协调节点
所有相关 Shard 并行查询
合并排序
返回结果

两阶段查询

  1. Query Phase(匹配 + 打分)
  2. Fetch Phase(取文档)

九、Near Real Time(准实时)

为什么不是实时?

  • 写入 -> buffer
  • refresh -> segment
  • search 只查 segment

👉 1 秒延迟换高吞吐

十、聚合(Aggregation)

ES 的实时分析能力

类型

  • Metric:sum / avg / max
  • Bucket:terms / date_histogram
  • Pipeline:对聚合结果再聚合

特点

  • 基于倒排 + doc_values
  • 内存消耗大(需谨慎)

十一、ES 集群与节点角色

常见节点角色

角色 职责
master 集群元数据
data 存储和搜索
ingest 预处理
coordinating 请求路由

十二、ES 的一致性模型

  • 默认 最终一致性
  • 写入副本后才返回
  • 网络异常可能短暂不一致

十三、ES vs 数据库(本质区别)

维度 ES 数据库
核心能力 搜索 事务
一致性
Join 不擅长
更新 delete + insert in-place
扩展 天然分布式 较难

十四、为什么 ES 这么设计?

  • 倒排索引 -> 快
  • 分片 -> 扩展
  • NRT -> 吞吐
  • 弱一致 -> 高可用

ES 用一致性换性能,用空间换时间

十五、总结

Elasticsearch 是一个基于 Lucene 的分布式搜索引擎, 以文档为单位,通过倒排索引实现快速搜索, 通过分片实现水平扩展, 通过副本保证高可用, 是一个准实时、弱一致、以搜索和分析为核心的系统。