GitHub 使用新搜索引擎彻底改进代码搜索

GitHub 推出全新代码搜索功能

GitHub 近日推出了全新的代码搜索功能,包括重新设计的搜索界面、新的代码视图,以及从头构建的搜索引擎。该搜索引擎旨在更快、更强大,并更好地理解代码。GitHub 软件工程师 Colin Merkel 表示,新功能的目标是帮助开发者快速搜索、导航和理解代码,将关键信息置于上下文中,从而提高开发效率。

主要功能和改进

  1. 更快的搜索速度:新搜索引擎的速度是之前版本的两倍。
  2. 灵活的查询支持:支持子字符串查询、正则表达式和符号搜索。例如,用户可以在不克隆仓库的情况下,搜索组织内所有仓库中的特定字符串:

    org:my_org "string to look for"
  3. 高级查询选项:可以限制查询为特定语言或仓库中的文件,排除特定路径,或使用 GitHub 搜索查询语法支持的其他功能。
  4. 集成的代码视图:新代码视图将搜索与文件浏览器集成,支持代码导航和浏览,允许跳转到超过 10 种语言的符号定义。

技术实现细节

GitHub 工程师 Timothy Clem 详细介绍了新搜索引擎在灵活性、性能和可扩展性方面的技术实现。

  1. 强大的索引器:搜索引擎的核心是一个强大的索引器,能够快速运行查询。该索引器专门为代码设计,能够区分编程语言,不忽略标点符号,不去除停用词等。
  2. 索引构建:GitHub 通过分析 4500 万个仓库(包含 115TB 的内容,涉及 155 亿个文档)构建了搜索索引。为了减少工作量,GitHub 使用了 Git blob 对象 ID 来将唯一文档均匀分布在分片上,并利用了托管大量重复内容的特点。
  3. 查询处理:当收到新查询时,查询会被解析为抽象语法树,并转换为 n 个并发请求发送到搜索集群中的不同分片。分片执行低级处理,如将正则表达式转换为子字符串查询。最后,分片将结果返回给查询服务,查询服务聚合结果并选择前 100 个。
  4. 性能指标:单个分片的 p99 响应时间约为 100 毫秒,但由于聚合响应、权限检查和语法高亮等因素,总响应时间会更长。每个查询会占用索引服务器的一个 CPU 核心约 100 毫秒,因此 64 核主机的上限约为每秒 640 个查询。
  5. 索引更新:GitHub 可以在约 18 小时内重新索引整个仓库库。整体索引大小为 25TB,大约是原始数据的四分之一。

免费开放

新的代码搜索功能对所有 GitHub 用户免费开放。

阅读 39
0 条评论