Github搜索那些事

前言

一个合格的开发者,应该要熟练地使用Google、Baidu等搜索引擎(不然怎么复制别人的代码)。而搜索引擎为了方便用户的使用,基本都提供了高级搜索功能。而今天介绍的Github,作为全球最大的同性交友网站,存储的代码量可能是全世界最多的。为了方便大家寻找自己需要的代码,同样提供了很多方便的高级搜索语法。


搜索简介

先上文档:https://help.github.com/en/github/searching-for-information-on-github。
此文档为Github官网介绍搜索语法的文档,提供各种语言版本,比如中文。

搜索入口

基本每个github页面左上角都有个搜索框,可直接输入关键字进行搜索。或者也有专门的搜索页面:https://github.com/search 或者高级搜索页面:https://github.com/search/advanced

搜索底层实现

简单提一句:github的搜索使用了ElasticSearch集群来支持。每当有提交进入github时,索引就会建立。每当Issues和PR创建或者修改时也会建立索引。如果对ES比较熟悉的话,理解起来更快一些。

初级搜索语法

想搜啥就输入啥就好了

高级搜索语法

高级搜索语法简单而言就是:

  1. 将资源分类

    一般我们搜索的都是从代码内容中搜索。而实际上github上的资源不仅仅是代码。还有比如:Repositories、Topics、Issues and pull requests、Code、Commits、Users、Packages、Wikis。

  2. 对每一类资源的几乎每个属性都进行了搜索的支持

    比如Rspositories的名称、Stars、Created间等。比如Code的所属Repository、User、Path、Language、Filename、extension等。

  3. 支持不同属性的交并集查询,支持数值、日期等搜索

    比如:user:dytttf stars:>10 created:>2010-01-01

高级搜索示例

高级搜索限制

  • 不支持长度超过 256 个字符的查询
  • 无法使用超过五个 AND、OR 或 NOT 运算符构造查询
  • 日期格式仅支持:ISO8061,即YYYY-MM-DD 或者 YYYY-MM-DDTHH:MM:SS+00:00
  • 必须登录才能跨所有公共仓库搜索代码,非登录状态下搜索的仓库是不全的
  • 只有默认分支编索引进行代码搜索
  • 只有小于 384 KB 的文件可搜索
  • 只有少于 500,000 个文件的仓库可搜索
  • 除了 filename 搜索以外,搜索源代码时必须始终包括至少一个搜索词。 例如,搜索 language:javascript 无效,而搜索 amazing language:javascript 有效。(BUT 感觉这条限制并不存在)
  • 无法使用以下通配符作为搜索查询的一部分:. , : ; / \ ` ‘ “ = * ! ? # $ & + ^ | ~ < > ( ) { } [ ]. 搜索只会忽略这些符号

一些有趣的搜索

如何寻找最火爆的项目

通过仓库的star数来筛选:stars:>100000 然后发现第一名竟然从来没有听说过,看来是在下孤陋寡闻了。

如何寻找人气最高的大神

查找followers大于某个值的用户:followers:>=50000 然后你会发现阮一峰真NB。

如何看到当前github的体量

在搜索首页你会看到搜索框上出现下列语句之一(好像是随机的,当前时间20200222):

  • Search more than 50M users
  • Search more than 491M issues
  • Search more than 155M repositories

而在20200211,出现的是:
- Search more than 49M users

如何找到github最早注册的用户

查找用户,并按照创建时间筛选:created:<2008-01-01
如果你想知道github用户增长趋势,只要不断变化时间搜索就好了。

最后

一个简单的爬虫,让你看清github的用户趋势:https://github.com/dytttf/little_spider/tree/master/github