MST
星途 面试题库

面试题:ElasticSearch中searchtype的几种常见类型及对搜索结果的基础影响

请简述ElasticSearch中searchtype的几种常见类型,如query_then_fetch、dfs_query_then_fetch等,并说明它们对搜索结果在准确性、性能方面有哪些基础的影响?
26.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

1. query_then_fetch

  • 工作原理
    • Query阶段:在各个分片上执行查询,每个分片根据查询条件,从本地的倒排索引中找到符合条件的文档ID,并按照相关性得分进行排序,然后只返回文档ID和相关性得分等少量信息给协调节点。
    • Fetch阶段:协调节点收集到所有分片返回的文档ID后,根据这些ID去各个分片上获取完整的文档内容,并最终返回给客户端。
  • 对准确性的影响:准确性较高,因为它是基于每个分片的本地索引进行查询,正常情况下能准确返回符合查询条件的文档。但在一些复杂的跨分片聚合场景下,由于只在每个分片内排序,可能存在全局排序不准确的情况。
  • 对性能的影响:性能较好,在Query阶段只传输少量的文档ID和得分信息,网络传输开销小。但Fetch阶段可能存在多次远程调用获取文档内容的操作,如果文档数量较多,可能会有一定性能损耗。

2. dfs_query_then_fetch

  • 工作原理
    • DFS(Distributed Fuzzy Search)阶段:在各个分片上先执行一个轻量级的查询,主要目的是收集全局的词频等统计信息。这个阶段每个分片会将本地的词频等信息返回给协调节点,协调节点汇总这些信息得到全局的词频等统计数据。
    • Query阶段:基于DFS阶段得到的全局统计信息,在各个分片上重新执行查询,计算文档的相关性得分,并返回文档ID和相关性得分等少量信息给协调节点。
    • Fetch阶段:与query_then_fetch的Fetch阶段相同,协调节点根据文档ID去各个分片获取完整文档内容并返回给客户端。
  • 对准确性的影响:准确性更高,由于在查询前收集了全局的词频等统计信息,在计算相关性得分时能更准确地反映文档与查询条件的相关性,特别是在涉及到词频、文档频率等影响相关性的因素时,相比query_then_fetch能给出更精准的排序。
  • 对性能的影响:性能相对较低,因为多了DFS阶段,这个阶段会增加额外的网络开销和计算开销,特别是在数据量较大时,DFS阶段收集全局统计信息的操作会消耗更多资源。

3. query_and_fetch

  • 工作原理:在各个分片上同时执行查询和获取文档内容的操作,每个分片直接返回符合查询条件的完整文档给协调节点,协调节点收集所有分片返回的文档后进行汇总并返回给客户端。
  • 对准确性的影响:准确性与query_then_fetch类似,基于本地索引查询,正常情况下能准确返回文档,但同样在复杂跨分片聚合场景下可能存在全局排序不准确问题。
  • 对性能的影响:性能较差,因为每个分片都要返回完整文档,网络传输开销大,特别是在文档数量较多且文档内容较大时,网络带宽消耗严重,同时协调节点处理大量返回数据的压力也较大。

4. count

  • 工作原理:专门用于统计符合查询条件的文档数量。在各个分片上执行查询统计,每个分片返回本地符合条件的文档数量,协调节点汇总这些数量得到总的文档数量并返回给客户端。
  • 对准确性的影响:准确性高,能准确统计出符合查询条件的文档总数。
  • 对性能的影响:性能较好,因为只需要统计数量,不需要获取文档内容,网络传输和处理开销小,特别是在只关心文档数量而不关心具体文档内容的场景下效率较高。