导入
问题描述
让我们来看一个要求你为搜索引擎设计搜索相关性系统的问题描述。
问题陈述
面试官要求你设计一个搜索引擎的搜索相关性系统。
澄清问题
我们通过明确以下三个方面来澄清问题:范围、规模和个性化。
问题范围
面试官的问题非常宽泛。你最好尽可能避免歧义,向面试官提出尽可能多的问题。这有助于你在思考最佳解决方案时缩小问题范围。
因此,你向面试官提出的第一个问题可能是:
在深入寻找解决方案之前,明确问题范围至关重要。为便于本章讨论,我们假设你正在构建一个类似 Google 或 Bing 的通用搜索引擎来获取相关结果,但所讨论的技术和方法适用于所有类型的搜索引擎。
最终,问题可以精确描述为:
为此,你需要构建一个机器学习系统,通过按相关性排序,为搜索查询提供最相关的结果。因此,你的任务聚焦于搜索排序问题。
📝 处理专用搜索引擎的方法也大致相似。
规模
当你明确要构建的是一个通用搜索引擎后,确定系统的规模同样关键。几个重要问题是:
- 你的搜索引擎需要覆盖多少个网站?
- 预计每秒需要处理多少请求?
我们假设你需要从数十亿份文档中进行搜索,并且搜索引擎每秒大约接收 10,000 次查询(QPS)。
理解这一规模对于设计我们的相关性系统至关重要。例如,在本章后续部分,我们将介绍基于漏斗结构的方法:在这个大规模搜索系统中,随着漏斗层级的深入,模型复杂度逐步提升,同时待处理的文档集合逐渐减少。
个性化
另一个需要考虑的重要问题是:用户是否已登录。这将决定你能在多大程度上引入个性化因素以提升结果的相关性。我们假设用户已登录,并且你可以访问其个人资料以及历史搜索记录。