面试题答案
一键面试1. query_then_fetch
- 合理性:先在各个分片上执行查询,获取文档的ID列表,再根据ID去对应的分片上获取完整文档。这种方式适用于需要快速获取大量文档ID,并在后续需要获取文档详细内容的场景。比如在一个大型电商搜索场景中,用户搜索某个商品关键词,先快速得到符合条件的商品ID,再获取商品详细信息展示给用户。
- 优势:减少网络传输量,提高查询效率。因为在第一步只传输文档ID,而非完整文档数据。而且它可以并行处理各个分片的查询,充分利用集群资源。
2. dfs_query_then_fetch
- 合理性:在执行
query_then_fetch
之前,会先在各个分片上收集词频等统计信息,用于更准确的相关性计算。适用于对搜索结果相关性要求极高的场景,如学术文献搜索,需要精准地根据关键词的频率和分布来返回最相关的文献。 - 优势:能够提供更准确的搜索结果相关性排序,因为它在查询阶段充分考虑了词频等信息,相比
query_then_fetch
能更精确地评估文档与查询的相关性。
3. count
- 合理性:仅用于统计符合查询条件的文档数量,不获取文档内容。适用于只关心数量的场景,比如在一个论坛中,需要快速统计某个板块下的帖子数量。
- 优势:效率高,因为不需要获取文档具体内容,只专注于数量统计,减少了不必要的数据传输和处理,能够快速返回统计结果。
4. scan
- 合理性:用于深度分页场景,它不会像普通分页那样随着分页深度增加而性能急剧下降。比如需要遍历索引中大量数据进行数据迁移、备份等操作时非常适用。
- 优势:可以保持一个滚动的游标,持续从索引中获取数据,适合对大量数据进行无状态的遍历操作。它避免了传统分页方式在深度分页时内存和性能方面的问题。