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比较熟悉的话,理解起来更快一些。
初级搜索语法
想搜啥就输入啥就好了
高级搜索语法
高级搜索语法简单而言就是:
将资源分类
一般我们搜索的都是从代码内容中搜索。而实际上github上的资源不仅仅是代码。还有比如:Repositories、Topics、Issues and pull requests、Code、Commits、Users、Packages、Wikis。
对每一类资源的几乎每个属性都进行了搜索的支持
比如Rspositories的名称、Stars、Created间等。比如Code的所属Repository、User、Path、Language、Filename、extension等。
支持不同属性的交并集查询,支持数值、日期等搜索
高级搜索示例
- 查找某个用户:user:dytttf
- 查找某个仓库:repo:dytttf/antispider
- 查找python语言包含spider的代码库:language:python in:file spider
高级搜索限制
- 不支持长度超过 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