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