MST
星途 面试题库

面试题:ElasticSearch搜索类型之中等难度题

在ElasticSearch中,简述query then fetch搜索类型的工作原理以及它在何种场景下会存在性能问题?
17.4万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

Query Then Fetch搜索类型工作原理

  1. Query阶段
    • 客户端发送搜索请求到一个协调节点(coordinating node)。
    • 协调节点将查询请求广播到索引中的所有分片(primary shard 和 replica shard)。
    • 每个分片在本地执行查询,并生成一个按照相关性得分排序的文档ID列表。这个列表仅包含文档ID和相关性得分等少量信息,不包含文档的完整内容。
    • 每个分片将这些文档ID列表返回给协调节点。
    • 协调节点合并这些来自不同分片的文档ID列表,并按照相关性得分重新排序,选出需要返回给客户端的文档ID集合(通常是前N个)。
  2. Fetch阶段
    • 协调节点根据上一阶段选出的文档ID,去各个包含这些文档的分片上获取文档的完整内容。
    • 分片将文档的完整内容返回给协调节点。
    • 协调节点将这些完整的文档组装起来,返回给客户端。

性能问题场景

  1. 高网络延迟场景:在Query阶段,协调节点需要与所有分片通信,在Fetch阶段,又需要再次与包含所需文档的分片通信。如果网络延迟较高,多次往返通信会显著增加整体的搜索延迟。
  2. 大量文档命中场景:当查询命中大量文档时,在Query阶段,每个分片返回的文档ID列表会较大,协调节点合并和排序这些列表的开销增大。并且在Fetch阶段,需要从多个分片获取大量文档的完整内容,网络传输和处理的负担加重,可能导致性能瓶颈。
  3. 文档字段较多且内容大场景:如果文档包含大量字段且内容较大,在Fetch阶段从分片获取文档完整内容时,网络传输的数据量巨大,会成为性能的瓶颈点,拖慢整体搜索速度。