Elasticsearch

共 58 题
#

1. Bulk API 的批次字节数、并发数和重试如何调节,遇到 429 时为何必须实施背压

A 429 表示请求体格式错误,应减小批次
B 遇到 429 应加大并发强行写入
C 429 表示集群写入压力过大,此时必须实施背压(限速/降并发)让集群消化积压,而非盲目重试或继续压测 ✓ 正确答案
D 429 只与客户端代码有关,与集群状态无关
#

2. ES 8.x Java Client 的 CompletableFuture 异步查询与虚拟线程的协作

A 异步 API 返回 CompletableFuture 实现非阻塞并发,虚拟线程允许大量阻塞 I/O 而不占平台线程,二者协作可兼顾代码简洁与高并发 ✓ 正确答案
B 虚拟线程无法与异步 API 搭配
C 异步 API 会阻塞调用线程
D 虚拟线程只适用于 CPU 密集任务
#

3. Elasticsearch 8.15 中 Ingest Pipeline 与 Spring Boot 4.0 的预写入数据治理流程协同

A Ingest Pipeline 在查询时执行,不影响写入
B Ingest Pipeline 在文档写入前执行处理器链做清洗/转换/脱敏,Spring 侧组装业务数据并指定 pipeline,轻量治理下沉 ES、复杂业务留应用 ✓ 正确答案
C 数据治理必须全部在 Spring 应用层完成
D pipeline 失败不影响文档写入
#

4. Elasticsearch 8.15 引入的 ES|QL 在 Spring Boot 4.0 集成中的查询 DSL 与传统 DSL 差异

A ES|QL 与 DSL 完全等价,无差异
B DSL 更适合复杂管道分析
C ES|QL 是管道式文本查询语言,适合端到端分析(过滤+聚合+后处理),传统 DSL 是 JSON 结构化且 Java Client 类型安全,二者可互补 ✓ 正确答案
D ES|QL 无法聚合
#

5. Elasticsearch 8.x 中 Machine Learning 异常检测与 Spring Boot 业务告警联动的实现

A Spring Boot 直接做异常检测,ES 只存储
B 异常检测结果只能人工查看,无法程序化
C ES ML 通过 datafeed+job 检测异常并输出异常分数,Spring Boot 拉取结果、按阈值过滤并路由到业务告警,实现检测与告警解耦 ✓ 正确答案
D 告警必须由 ES 的 Watcher 完成,Spring 无法参与
#

6. Elasticsearch 8.x 的 snapshot/restore API 与 Spring Boot 定时任务实现的灾备策略

A 快照只能备份一次,无法增量
B 灾备只需创建快照,无需验证恢复
C ES snapshot 注册仓库后增量备份,Spring Boot 定时任务调度创建/保留快照并验证 restore,形成完整灾备链路 ✓ 正确答案
D snapshot 与 Spring Boot 无法结合
#

7. Elasticsearch 的倒排索引与 TF-IDF/BM25

A BM25 与 TF-IDF 完全相同
B 倒排索引是线性扫描所有文档
C BM25 不包含 IDF 因子
D 倒排索引建立 term→文档列表映射加速检索,BM25 通过 TF 饱和与文档长度归一化改进 TF-IDF,是 ES 默认评分算法 ✓ 正确答案
#

8. Elasticsearch 的索引模板(Index Template)

A 模板无法设置 mapping
B 模板只影响查询,不影响索引创建
C 索引模板在索引名匹配 pattern 时自动应用 settings/mappings/aliases,配合 rollover 统一时序索引配置,多个模板按 priority 决定 ✓ 正确答案
D 所有模板优先级相同,无法覆盖
#

9. Lucene 的 forceMerge(maxNumSegments)对只读索引的优化与 Segment 数量控制

A forceMerge 适合高频写入的索引
B 段数多少不影响查询性能
C forceMerge 不消耗额外 IO
D forceMerge 把索引合并为 max_num_segments 指定数量的段,减少段数提升查询性能,但重写全量数据、耗 IO,适合只读索引 ✓ 正确答案
#

10. Reindex 迁移 Mapping 时如何利用新索引、校验计数和原子别名切换实现可回滚发布

A 先建新索引并 reindex,校验文档计数,再用原子别名操作把别名切到新索引、切回旧索引即可回滚,实现无感迁移 ✓ 正确答案
B 迁移必须直接改旧索引,无法回滚
C reindex 后无需校验数据
D 别名切换无法原子完成
#

11. bool 查询的 filter 与 must 在评分、缓存和执行上有何差异,精确条件应放在哪一类

A must 不参与评分,适合放精确条件
B filter 与 must 在评分上无差异
C filter 子句不参与评分且结果可被查询缓存复用,精确条件(term/range)应放 filter 以提升性能 ✓ 正确答案
D filter 无法被缓存
#

12. 使用 Elasticsearch 8.x 的 Connector 同步 MySQL 8.4 与 Spring Boot 数据双写的一致性保障

A 最稳妥方案是应用只写 MySQL,ES 通过 Connector/CDC 从 binlog 异步同步,避免双写非原子问题,并配合重试保证最终一致 ✓ 正确答案
B 双写一定成功,无需处理
C Connector 无法实现增量同步
D 应用同时写 MySQL 与 ES 天然一致
#

13. 使用 Elasticsearch 8.x 的 Cross-Cluster Search 在 Spring Boot 微服务多机房场景的查询路由

A CCS 只能查询本地集群
B CCS 通过注册远程集群用"远端:索引"语法跨集群查询,多机房场景应本地优先查询、必要时跨集群聚合,并权衡跨机房延迟 ✓ 正确答案
C 跨机房查询无延迟成本
D CCS 无法聚合多集群数据
#

14. 在 Spring Boot 4.0 中通过 Elasticsearch Java Client 8.x 的异步 API 与虚拟线程配合

A ES 查询是 I/O 密集,虚拟线程可承载大量阻塞 I/O 而不占平台线程,配合异步 API 编排提升并发,需用信号量限制并发避免过载 ✓ 正确答案
B 虚拟线程无法用于 ES 查询
C 异步 API 必须阻塞平台线程
D 虚拟线程只适合 CPU 密集
#

15. 在 Spring Cloud 微服务中通过 OpenTelemetry 追踪 Elasticsearch 慢查询的根因分析方法

A OTel Agent 自动生成 ES 请求 span,结合链路定位慢查询并核对 ES 侧慢查询日志/线程池/GC 指标,判断是查询本身还是集群资源问题 ✓ 正确答案
B OTel 只能追踪 HTTP,无法追踪 ES
C 慢查询根因一定在应用侧
D 无需结合 ES 侧指标即可定位根因
#

16. 排查集群不稳定时,如何关联 JVM 堆、断路器、线程池拒绝、分片恢复和磁盘水位

A 只看磁盘水位即可判断全部问题
B 断路器触发与内存无关
C 需联动分析 JVM 堆/GC、断路器拒绝、线程池拒绝、分片恢复与磁盘水位,这些因素常形成"堆满→GC 慢→查询慢→拒绝→断路器"的因果链 ✓ 正确答案
D 线程池拒绝与负载无关
#

17. Dynamic Template 如何按字段名或检测类型映射数据,规则顺序错误会导致什么不可逆结果

A 模板规则顺序不影响结果
B mapping 可随时修改字段类型
C 模板按字段名/检测类型匹配,按顺序先匹配先生效,更具体的规则应排在通用规则前,否则可导致错误映射且 mapping 不可原地修改需 reindex ✓ 正确答案
D 模板只能匹配字段名,不能匹配类型
#

18. ES 8.x Java API Client 的类型安全查询构建(lambda 构建器 vs JSON 字符串)

A lambda 构建器无法表达复杂查询
B JSON 字符串有编译期类型检查
C 两种方式都不支持 bool 查询
D lambda 构建器类型安全、编译期检查字段方法,推荐使用;JSON 字符串灵活但无编译期检查,适合动态复用场景 ✓ 正确答案
#

19. Elasticsearch 8.x 的 Index Sorting 在高基数字段排序时的内存与磁盘代价如何权衡

A 高基数字段最适合 Index Sorting
B Index Sorting 靠相近值集中提升范围查询局部性,但高基数字段值不集中、排序结构开销大,收益低代价高,应选低基数高频过滤字段 ✓ 正确答案
C Index Sorting 对任意字段收益相同
D Index Sorting 不消耗额外资源
#

20. Elasticsearch 8.x 的安全默认开启(TLS/HTTPS)

A 8.x 默认关闭安全,与 7.x 相同
B 8.x 默认开启 TLS/HTTPS 加密与用户认证,首次启动自动生成证书,客户端需用 HTTPS+CA 证书+认证信息连接 ✓ 正确答案
C 8.x 无法使用 HTTPS
D TLS 只加密不认证
#

21. Elasticsearch 与 OpenSearch 的边界

A OpenSearch 与 ES 8.x 完全等价
B OpenSearch 是 ES 7.10 的 Apache 2.0 fork,与 7.x 兼容,但 ES 8.x 与 OpenSearch 各自演进、API 已有差异,选择需考虑许可与生态 ✓ 正确答案
C OpenSearch 是 ES 的官方分支
D 两者 API 永远一致
#

22. Elasticsearch 主分片数量一旦创建为何难以原地修改,容量规划应如何权衡分片大小与并行度

A 主分片数可随时修改
B 主分片数由路由 hash 决定、创建后不可原地修改,需按数据量/单分片目标大小规划,分片多并行高但开销大、分片少单块大但慢 ✓ 正确答案
C 分片越多越好,无任何代价
D 单分片越大查询越快
#

23. Elasticsearch 的 ILM(Index Lifecycle Management)

A ILM 只能删除索引
B ILM 通过策略定义 Hot/Warm/Cold/Delete 等 phase 及 rollover/shrink/forcemerge/delete 动作,自动管理索引生命周期与存储分层 ✓ 正确答案
C ILM 与 rollover 无关
D ILM 只能用于非时序数据
#

24. Elasticsearch 的 Mapping 与字段类型

A keyword 用于全文检索
B text 字段支持 term 精确聚合
C Mapping 字段类型可随时修改
D Mapping 定义字段类型与索引方式,text 分词用于全文检索、keyword 不分词用于精确匹配/聚合/排序,字段类型创建后大多不可修改 ✓ 正确答案
#

25. Elasticsearch 的 Mapping(Dynamic/Explicit)

A Dynamic Mapping 永远是最好的选择
B Explicit Mapping 无法定义字段类型
C Dynamic Mapping 按 JSON 值自动推断类型、灵活但不可控,Explicit Mapping 显式定义类型可控,生产常用 explicit 配合 dynamic template ✓ 正确答案
D dynamic 参数只有 true/false 两态
#

26. Elasticsearch 的 PIT(Point In Time)一致性读

A PIT 与 scroll 完全相同
B PIT 创建时间点一致的索引视图,配合 search_after 实现稳定深分页,保证分页期间数据一致,是 ES 8 推荐的分页方式 ✓ 正确答案
C PIT 不保证数据一致
D PIT 是一次性查询,不能分页
#

27. Elasticsearch 的 Vector Search(HNSW)与语义搜索

A HNSW 是精确最近邻,无近似
B 向量检索只能用于图片
C 通过 dense_vector 存储向量、HNSW 图索引做近似近邻检索,支持余弦等度量,实现语义搜索并可配合 RAG 做文档问答 ✓ 正确答案
D 语义搜索与 BM25 完全无关
#

28. Elasticsearch 的 _source/stored_fields 的取舍

A _source 存原始 JSON 支持 reindex/脚本/部分更新但占存储,stored_fields 显式存指定字段快速返回,关闭 _source 会失去这些能力 ✓ 正确答案
B stored_fields 与 doc_values 作用相同
C _source 默认关闭
D 关闭 _source 不影响 reindex
#

29. Elasticsearch 的 bulk API 与批量导入

A bulk 一次只能写一条
B bulk 导入应频繁 refresh 提升性能
C bulk 用 NDJSON 一次提交多条操作减少往返,通过调批次大小、并发与 refresh 策略优化吞吐,可用 BulkProcessor 自动管理 ✓ 正确答案
D 批量导入无需处理 429
#

30. Elasticsearch 的 cat 命令族

A cat API 以紧凑表格返回集群健康、节点、索引、分片、线程池等信息,支持 ?v/?h/?s 等标志,是快速诊断集群问题的工具 ✓ 正确答案
B cat API 只能返回 JSON 大对象
C cat 命令无法查看分片状态
D cat 命令只能查看索引,不能查看节点
#

31. Elasticsearch 的 index.sort 与 _doc 排序

A _doc 排序按字段值排序
B index.sort 让文档按字段物理排序提升范围查询局部性,_doc 按段内存储顺序排序、零开销,适合 search_after 翻页 ✓ 正确答案
C _doc 排序开销最大
D index.sort 不改变文档顺序
#

32. Elasticsearch 的 keyword vs text 字段

A keyword 用于全文检索
B text 分词用于全文检索(match),keyword 不分词用于精确匹配/聚合/排序,同一字段可用 fields 同时定义 text 与 keyword ✓ 正确答案
C text 字段可直接做聚合
D 两者都分词,无区别
#

33. Elasticsearch 的 nested 与 join 字段

A nested 无额外存储代价
B nested 用于父子关系,join 用于数组对象
C join 父子文档可跨分片
D nested 把数组对象存为独立隐藏文档保证对象内字段关联,join 定义父子关系同分片存储支持 has_child 查询,两者都有查询/更新额外代价 ✓ 正确答案
#

34. Elasticsearch 的 pipeline 聚合与可视化

A pipeline 聚合无法引用其他聚合结果
B pipeline 聚合直接作用于源文档
C pipeline 聚合对父聚合结果做二次计算(如 derivative、moving_avg、bucket_script),可支撑趋势/变化率可视化 ✓ 正确答案
D pipeline 聚合只能求和
#

35. Elasticsearch 的 query_then_fetch 与 dfs_query_then_fetch

A dfs_query_then_fetch 性能更好
B 两者评分完全相同
C query_then_fetch 分片本地评分性能好但多分片 IDF 有偏差,dfs_query_then_fetch 增加全局词频统计阶段评分更准但开销更大 ✓ 正确答案
D query_then_fetch 无 query 阶段
#

36. Elasticsearch 的 reindex 与数据迁移

A reindex 把数据复制到目标索引,用于 mapping 变更/分片调整/跨集群迁移,可并行切片、过滤、校验计数 ✓ 正确答案
B reindex 只能复制,不能过滤
C reindex 无需建目标索引
D reindex 无法跨集群
#

37. Elasticsearch 的 runtime fields

A runtime fields 有独立索引,性能好
B runtime fields 在查询时动态计算、不占索引存储、灵活,但无索引加速、性能差,适合临时/低频分析,高频场景应改用索引字段 ✓ 正确答案
C runtime fields 写入时计算并存储
D runtime fields 无法用于聚合
#

38. Elasticsearch 的 search_after 与分页

A search_after 可以随机跳页
B from+size 做深分页受 max_result_window 限制且每分片取大量候选,search_after 用上一页排序值滚动取下一页,配合 PIT 与唯一 tiebreaker 适合深分页 ✓ 正确答案
C from+size 深分页无性能限制
D search_after 无需排序字段
#

39. Elasticsearch 的分词器(Analyzer)与中文分词(IK)

A IK 分词器无需配置即可精准
B 分词器只有 standard 一种
C 索引与查询分词器必须相同
D Analyzer 由字符过滤、分词器、词项过滤组成,中文可用 IK 的 ik_max_word 细粒度索引与 ik_smart 查询,并配置自定义词典 ✓ 正确答案
#

40. Elasticsearch 的架构(Node/Cluster/Index/Shard)

A 主分片数可随时修改
B 副本分片不参与读取
C 集群由节点组成,索引分成主分片(创建时固定、决定路由)与副本分片(高可用与读分摊),每个分片内部是 Lucene 索引 ✓ 正确答案
D 分片内部不是 Lucene
#

41. Elasticsearch 的查询 DSL(match/term/bool/agg)

A term 用于全文检索,match 用于精确匹配
B filter 子句参与评分
C aggs 与 query 无法组合
D match 对 text 分词全文检索、term 对 keyword 精确匹配,bool 组合 must/filter/should/must_not,aggs 做聚合统计 ✓ 正确答案
#

42. Elasticsearch 的相关性评分(BM25)算法

A BM25 由饱和词频(k1 控制)、逆文档频率和文档长度归一化(b 控制)组成,b 越大长文档词频贡献被稀释越多 ✓ 正确答案
B b 参数控制词频饱和
C BM25 中词频越高得分线性无限增长
D IDF 与文档稀有度无关
#

43. Elasticsearch 的聚合(Aggregation)

A 聚合依赖倒排索引
B 聚合分 metric(统计)、bucket(分桶)、pipeline(二次聚合)三类,依赖 doc_values,terms 聚合用 shard_size 控制分片候选 ✓ 正确答案
C pipeline 聚合直接作用于源文档
D text 字段聚合性能最佳
#

44. Elasticsearch 的近实时(NRT)搜索与 refresh

A refresh_interval 越大可见性越高
B refresh 保证数据持久化
C 写入立即可见,无需 refresh
D 数据写入后经 refresh 生成可搜索段才可见,默认每秒一次形成近实时,refresh 管可见性、translog/flush 管持久性,可调 refresh_interval 权衡 ✓ 正确答案
#

45. HNSW 向量检索叠加结构化过滤时,过滤选择性如何影响召回率与候选扩展参数

A 过滤不影响向量检索召回
B num_candidates 越大查询越快
C 先做近似近邻搜索再做过滤,过滤选择性高会削减候选导致召回下降,应增大 num_candidates 补偿候选并评估召回率 ✓ 正确答案
D 过滤选择性越强召回率越高
#

46. ILM 的 rollover 应按年龄、大小还是文档数触发,主分片差异会如何影响阈值

A rollover 只能按年龄触发
B 阈值基于整个索引含副本
C 主分片大小差异不影响 rollover
D rollover 可按 max_age/max_size/max_docs 组合触发,阈值基于主分片总量,主分片分布不均时需用 max_primary_shard_size 避免单片过大 ✓ 正确答案
#

47. Lucene 段合并(merge)对写入性能的影响与 merge 策略(TieredMergePolicy)

A TieredMergePolicy 总是合并最大与最小段
B merge 重写数据消耗 IO,写入频繁会触发 merge 风暴,TieredMergePolicy 按大小分层合并相近段、用 max_merged_segment 控制以平衡成本与段数 ✓ 正确答案
C merge 不影响写入性能
D 段合并只提升写入、不提升查询
#

48. from 加 size 的深分页为何让每个分片保留大量候选,超过窗口后有哪些替代方案

A 深分页时每个分片都要取 from+size 条候选再合并,from 越大开销越大,受 max_result_window 限制,可用 search_after+PIT 或 scroll 替代 ✓ 正确答案
B from+size 无深度限制
C 深分页每个分片只取 size 条
D scroll 最适合交互式深分页
#

49. nested 对象为何需要隐藏文档保持数组元素关系,查询与更新成本相比普通 object 高在哪里

A object 数组扁平化会丢失对象内字段关联,nested 用隐藏文档保持关联,但 nested 查询较慢且更新会重写整个父文档 ✓ 正确答案
B nested 更新只改单个对象
C nested 与 object 查询成本相同
D object 数组保持对象内关联
#

50. 使用 Elasticsearch 8.x 与 Spring AI 2.0 RAG 模式结合实现文档问答系统的工程实践

A 切块向量化写入 ES 的 dense_vector,问题向量化后用 kNN 检索相关块,再交给 Spring AI 的 LLM 结合上下文生成,并评估召回与答案质量 ✓ 正确答案
B RAG 无需向量检索
C Spring AI 只负责向量化,不参与生成
D 文档问答不需要切分文档
#

51. 动态字段无限增长为何会引发 mapping explosion,模板、字段上限和扁平对象如何治理

A 动态字段无限增长会膨胀 cluster state 元数据,可用 dynamic false/strict、字段总数上限、动态模板和 flattened 类型治理 ✓ 正确答案
B flattened 类型会为每个属性建字段
C 字段数量上限无法设置
D mapping 字段无限增长无影响
#

52. 同一字符串使用 text 与 keyword 多字段时,全文相关性、聚合和排序分别应选择哪一个

A 全文检索应用 keyword 字段
B 聚合与排序应用 text 字段
C 全文相关性检索用 text(分词),聚合与排序用 keyword(doc_values 精确),避免 text 聚合依赖 fielddata 的高内存 ✓ 正确答案
D keyword 支持分词全文检索
#

53. 向量量化能减少内存但可能损失召回,如何用离线标注集和线上指标验证取舍

A 量化不影响召回率
B 量化省内存但可能损失召回,需用离线标注集算 recall@k 等指标并结合线上业务指标验证,量化内存收益与召回损失后决定取舍 ✓ 正确答案
C 量化一定最优,无需验证
D 线上指标不能反映检索质量
#

54. 快照只保存增量分片数据但不是文件系统复制,跨版本恢复前需要验证哪些兼容限制

A 快照是文件系统完整复制,任何版本可恢复
B 跨版本恢复无需验证
C 快照是分片级增量备份(非文件系统复制),依赖 Lucene 段与元数据格式,跨版本恢复需验证版本兼容、mapping/settings 与数据完整性,必要时经中间版本过渡 ✓ 正确答案
D 快照恢复后无需检查 shard 健康
#

55. 提高 refresh_interval 能改善批量写吞吐,但会怎样影响实时搜索和 refresh 后等待语义

A refresh_interval 只影响持久性不影响可见性
B 调大 refresh_interval 减少刷新提升写吞吐,但降低搜索可见性且 refresh=wait_for 会等待更久,批量导入常用关闭 refresh 提升吞吐 ✓ 正确答案
C refresh=true 会降低写吞吐但提升可见性
D wait_for 与 refresh_interval 无关
#

56. 自定义 routing 如何把同一业务键定位到相同分片,路由倾斜会造成哪些热点问题

A routing 与分片分配无关
B routing 倾斜不会造成热点
C 所有文档必须用同一 routing
D routing 通过 hash 把同一业务键路由到同一分片提升局部性,但业务键数据不均会造成热点分片,需拆分大键并监控分片负载 ✓ 正确答案
#

57. PIT 配合 search_after 如何提供稳定深分页,排序键为何必须包含唯一的 tiebreaker

A PIT 提供一致视图、search_after 用上一页末条排序值滚动,排序键必须含唯一 tiebreaker(如 _shard_doc)避免并列导致翻页重复或遗漏 ✓ 正确答案
B search_after 无需排序字段
C 排序并列不影响翻页
D PIT 无法与 search_after 配合
#

58. refresh、flush 与 translog 分别影响搜索可见性和持久性,不能把它们混为一谈的原因是什么

A refresh 即持久化,保证数据不丢
B flush 与 refresh 作用相同
C refresh 让内存数据生成可搜索段管可见性,translog 记录日志防数据丢失,flush 把段 fsync 落盘并清 translog 管持久性,三者职责不同 ✓ 正确答案
D translog 只影响搜索可见性