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

    • 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 与 Lucene 的关系

本章定位:理解 Elasticsearch 与 Lucene 的关系是掌握 ES 架构的第一步。Lucene 是底层核心库,ES 在它之上构建了分布式系统。


定义与作用

Lucene 是 Apache 开源的全文搜索引擎库,提供索引创建、搜索、分词、评分等核心功能。Elasticsearch 是基于 Lucene 构建的分布式搜索和分析引擎,将 Lucene 的单机能力封装为高可用、水平扩展的分布式服务。

解决的痛点:Lucene 只是一个 Java 库——没有 HTTP API、没有分布式能力、没有集群管理、没有数据持久化策略。开发者直接使用 Lucene 需要自己处理网络通信、节点发现、故障转移等底层问题。Elasticsearch 将 Lucene 的能力打包成一个开箱即用的分布式服务。


核心原理:ES 与 Lucene 的分工


完整示例:飞翔科技的架构讲解

场景一:白歌给小崔画架构分层

架构师白歌在入职培训中给小崔画了 ES 的架构分层:

层级组件职责关键技术
接口层REST API接收 JSON 请求,返回 JSON 结果HTTP, JSON
协调层Coordinating Node请求路由、结果归并、排序广播 + 归并算法
集群层Master + Discovery节点发现、分片分配、集群状态同步Raft 变体、Zen2
数据层Data Node + Lucene数据存储、搜索、评分、聚合Lucene Segment、BM25
存储层文件系统Segment 文件持久化mmap、fsync、Translog

场景二:搜索请求经历的每一层

小崔提交一个搜索请求,白歌在纸上画出完整路径:

客户端
  ↓ POST /students/_search {"query": {"match": {"major": "计算机"}}}
ES REST API(接口层)
  ↓ 解析 JSON → 构建 Query 对象
Coordinating Node(协调层)
  ↓ 广播:将查询转发到 students 索引的所有分片(P0 + P1 + P2)
Data Node × 3(数据层)
  ↓ 每个分片内的 Lucene 实例:
  ↓   ① Analyzer 分词:"计算机" → 词项
  ↓   ② 倒排索引检索:定位包含该词项的文档
  ↓   ③ BM25 评分:计算相关性得分
  ↓ 返回 Top N 文档 ID + 排序值
Coordinating Node(协调层)
  ↓ 归并排序:合并 3 个分片的结果 → 取全局 Top N
  ↓ Fetch Phase:从分片获取完整 _source
  ↓ 组装 JSON 响应
客户端 ← 返回最终结果

易错场景与面试考点

反例一:误以为每个 ES 节点只有一个 Lucene 实例

❌ 错误认知:每个 ES 节点 = 1 个 Lucene 实例
✓ 事实:每个分片 = 1 个 Lucene 实例。一个节点上有 N 个分片就有 N 个 Lucene 实例。

反例二:Lucene 的 Segment 与 ES 的 Refresh 混淆

❌ 误解:Refresh 就是数据写入磁盘
✓ 事实:Refresh 是将内存 Buffer 写入新的 Lucene Segment(可被搜索但未持久化),Flush 才是 fsync 到磁盘。

面试高频题

Q1:Elasticsearch 和 Lucene 的关系?

Lucene 是单机搜索引擎库,ES 是 Lucene 的分布式封装。ES 提供 REST API、集群管理、分片分配、请求路由等分布式能力,底层每个分片是一个独立的 Lucene 实例。可以理解为:Lucene 提供"引擎",ES 提供"车"。

Q2:ES 没有 Lucene 能工作吗?

不能。ES 的搜索、评分、分词等核心能力完全依赖 Lucene。但 ES 可以替换底层的 Lucene 版本或使用不同的 Similarity 实现。


小结

Elasticsearch 和 Lucene 是"汽车与引擎"的关系。Lucene 负责单机索引和搜索的核心能力,ES 在之上构建分布式集群管理、REST API、分片路由等高层次功能。理解每一层能做什么,是架构设计和故障排查的基础。

上一页
全文搜索与搜索引擎概述
下一页
Elasticsearch 核心架构