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

    • 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 面试中最高频的考点,从基础概念到架构设计,提供逐层递进的回答思路。


一、基础概念

Q1:Elasticsearch 是什么?它和 MySQL 的全文搜索有何本质区别?

维度MySQL LIKEElasticsearch
索引结构B+Tree(适合精确查找)倒排索引(适合全文搜索)
分词不支持内置 Analyzer,分词后建立倒排索引
相关度排序无BM25 评分,按相关性排序
扩展性单机为主(主从复制)天然分布式,水平扩展
搜索速度大数据量极慢(全表扫描)毫秒级(倒排索引直接定位)

Q2:倒排索引的原理?为什么比正排索引快?

倒排索引:词项(Term)→ 文档列表(Posting List)的映射。搜索"分布式搜索引擎":分词后查倒排→取交集→直接命中,无需遍历所有文档。

Q3:ES 的写流程是怎样的?(从 API 到磁盘)

协调节点计算分片 → 写入内存 Buffer + Translog → 默认每 1s Refresh(Buffer→Lucene Segment)→ 默认每 30min 或 Translog 达 512MB Flush(fsync 到磁盘)→ 并行同步副本 → 返回客户端。


二、搜索与评分

Q4:match、match_phrase、term 的区别和使用场景?

查询类型行为场景
match分词后各词项 OR/AND 匹配全文搜索(搜索框)
match_phrase分词后要求词项顺序一致(可设 slop)精确短语搜索
term不分词,精确匹配倒排索引中的词项查 ID、状态、标签(keyword 字段)

Q5:BM25 评分的三个因子?如何调优?

① IDF(逆文档频率):稀有词权重高;② TF 饱和(词频):第 10 次重复几乎不加分;③ 字段长度归一化:短字段匹配更有价值。调优参数:k1(默认 1.2)和 b(默认 0.75)。

Q6:bool 查询中 must 和 filter 的区别?

维度mustfilter
评分参与评分不评分(score=0)
缓存不缓存缓存(Filter Cache)
性能慢快
用途需要影响排序的条件精确筛选条件

三、集群架构

Q7:主分片创建后为什么不能修改?

路由算法 hash(_routing) % num_primary_shards 使用取模运算。分片数改变后所有文档的路由结果都变化。变更唯一方式:Reindex。

Q8:脑裂的成因和预防?

成因:网络分区导致出现两个满足 quorum 的分区各自独立选出 Master。预防:Master-Eligible 节点奇数(3 或 5)、ES 7.x 自动计算 quorum、ES 8.x 使用 Raft 协议。

Q9:集群 Yellow 和 Red 状态分别意味着什么?

  • Green:所有主分片和副本全部分配
  • Yellow:所有主分片已分配,至少一个副本未分配(数据不丢失,失去冗余)
  • Red:至少一个主分片未分配(部分数据不可用)

四、性能优化

Q10:ES 写入性能优化有哪些要点?

  1. 批量写入:Bulk 批次 5~15MB
  2. 关闭 Refresh:导入时 refresh_interval: -1,完成后恢复
  3. 异步 Translog:durability: async,增大 sync_interval
  4. 0 副本:导入时 number_of_replicas: 0,完成后追加
  5. 硬件:SSD 是刚需,多路径分散 I/O

Q11:搜索性能优化的关键点?

  1. 用 filter 替代 must:精确过滤条件放 filter,利用缓存
  2. 控制分页深度:search_after 代替 from+size
  3. 字段级优化:不评分字段设 norms: false,纯过滤字段设 index: false
  4. 减少返回字段:_source filtering
  5. Routing 优化:指定 routing 缩到单个分片

实战场景题

场景一:课程搜索引擎设计

Mapping:title 用 ik_max_word,category 用 keyword。排序:function_score 结合 enrollment_count + 原始 _score。聚合:terms 按 category 分组 + 嵌套 stats 统计价格。高可用:3 节点集群 + 1 副本 + 别名实现零停机切换。

场景二:日志分析系统设计

按天建索引:logs-2024-06-13,配合 Index Template 自动创建。ILM 策略:7 天后转 warm,30 天后删除。Mapping:dynamic: strict 控制字段数量。写入优化:refresh_interval: 30s,Bulk 5MB/批。


小结

Elasticsearch 面试核心分五个层级:基础概念(倒排索引/分词/写流程)→ 搜索查询(match/term/bool/BM25)→ 聚合分析(桶/指标/嵌套)→ 集群架构(分片/选举/脑裂)→ 性能优化(写入/搜索/硬件)。回答时遵循"定义→原理→示例→对比→陷阱"结构。

上一页
实战案例:课程搜索引擎