elasticSearch 的查询分两步fetch/query的过程

389 阅读2分钟

Elasticsearch 的查询分为两步骤——查询(query)和提取(fetch)的原因是为了提高查询性能和效率。

  1. 查询(query)阶段:在查询阶段,Elasticsearch 使用查询语句对匹配的文档进行评分,计算每个文档与查询的相关性分数(relevance score)。这个阶段主要涉及倒排索引的使用和相关性计算等操作。查询阶段的目标是尽可能快速地筛选出与查询匹配的文档,以减少后续的操作数据量。
  2. 提取(fetch)阶段:在提取阶段,Elasticsearch 根据查询结果中的文档标识符(例如文档ID)从底层存储中检索对应的文档内容。这个阶段主要涉及磁盘I/O操作,以获取查询结果的实际内容。提取阶段的目标是将需要的文档从磁盘加载到内存中,以便返回给用户。 将查询和提取分为两个阶段的好处有以下几点:
  3. 减少数据传输量:通过在查询阶段尽可能减少要处理的数据量,可以减少网络传输的数据量,提高查询性能和响应速度。
  4. 快速返回查询结果:查询阶段可以快速地评估文档的相关性,并返回匹配的文档ID列表。这样,用户可以更快地获得初步的查询结果,而不需要等待文档内容的提取。
  5. 避免不必要的磁盘读取:通过在查询阶段首先进行筛选,可以避免在提取阶段不必要的磁盘I/O操作。这对于大规模的索引和高负载环境下尤为重要,可以减轻磁盘的负载压力。
  6. 支持分布式架构:将查询和提取分为两个阶段可以更好地支持分布式架构。协调节点负责查询阶段的处理,并将查询请求发送到各个数据节点进行提取操作,实现分布式查询和检索。 将查询分为查询和提取两个阶段有助于提高性能、减少数据传输量、快速返回初步结果,并支持分布式架构的优势。