GitHub痛改代码搜索引擎,18小时建155亿个文档索引,技术已公开
萧箫 发自 凹非寺量子位 | 公众号 QbitAI
还记得GitHub发布的新版代码搜索引擎吗?
经过一番测试优化后,GitHub现在公开了背后的技术原理。
最新版搜索引擎,不仅解决了之前搜代码时驴唇不对马嘴的情况,还可以直接用正则表达式搜索;此外也解决了部分项目上传后搜不到等问题……
网友们看完技术原理后感到惊喜:
这真不错!我看到了谷歌代码搜索引擎的影子。
其实我知道,很少有做代码搜索引擎的人愿意去GitHub,但很高兴能看到这一功能将变得更好用。
要知道,此前GitHub的代码搜索引擎,一度被用户吐槽形同虚设。
有不少用户直接自己找了更好用的代码搜索引擎,专门搜索想要的代码:
在这种情况下,新版GitHub代码搜索引擎究竟采用了什么技术,做出了哪些改进?
基于Rust语言的搜索引擎
GitHub新版代码搜索引擎名叫Blackbird,它的关键在于重新构建了一个索引。
这里主要实现两类索引,包括正向索引(Forward index)和反向索引(Inverted index)。
简单来说,正向索引指先给数据库中的各种内容编号(ID),然后通过这些内容ID来搜索对应的具体内容:
这种搜索方法虽然比较直观,也容易理解,但搜索量太大了。如果我们只想通过关键字搜索对应内容,就需要用到反向索引。
反向索引即通过内容中关键词,直接搜到对应的内容ID,从而立刻定位到对应的内容。
具体到反向索引实现方法上,GitHub采用了一种名叫ngram索引的方法,可以很方便地查找内容的子字符串。
这种方法怎么理解?
以limits这个字符串为例,如果ngram中的n=3,那么我们就可以将它分为lim、imi、mit、its四个子字符串。
这时候搜索任意一个字符串,都能找到对应的内容ID,从而定位到想要搜索的内容。
但GitHub的程序员们也意识到,这样构建的索引太大了,要真这样搜索的话会导致服务器不够用,因此还需要对这种方法进行优化。
在Hacker News中有一位GitHub程序员对此做出了解释,即采用一种叫做覆盖稀疏ngrams(covering sparse ngrams)的方法生成候选集,并搜索对应内容,其中9代表ch、6代表he、3表示es,以此类推:
以这类方法为基础建立的系统如下:
所以,新版搜索引擎是否真的比之前更好用了?
测试版体验如何?
目前GitHub中有大约4500万个存储库、115TB代码和155亿个文档。
据GitHub官方表示,原本在改进之前,处理155亿个文档需要大约36个小时。
然而在重写代码之后,需要抓取的文档数量降低了50%以上,因此只需要18个小时左右就可以重新给整个语料库创建索引。
除此之外,需要搜索的内容量也降低了不少。
原本需要搜索的内容在115TB左右,现在将重复内容和数据删除之后,包括索引和内容压缩副本加起来只有25TB大小,缩减到之前的25%左右。
目前测试版依旧在开放申请中,有不少GitHub用户已经试用了一波。
虽然有不少用户对新搜索引擎测试版反响不错,但也有人提出了一些建议。
例如目前这个代码搜索引擎还没办法过滤fork项目,有时候用代码搜索引擎,搜出来全是同一个项目。
对此GitHub程序员也给出了反馈,表示他们之前一直在调整索引这一块,以后会考虑这样的附加功能。
除此之外,也有用户表示,GitHub新版搜索引擎依旧不好用,它从来不区分符号的定义和使用,有时候搜出来的结果,往往需要往后翻5页左右,才能找到想要的结果。
对此,还有网友推荐了自己常用的代码搜索引擎,如Sourcegraph。
你试用过GitHub的新代码搜索引擎了吗?或是还有什么其他好工具推荐?
新版代码搜索引擎申请试用:https://github.com/features/code-search
参考链接:[1]https://github.blog/2023-02-06-the-technology-behind-githubs-new-code-search/[2]https://news.ycombinator.com/item?id=34680903
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
-
上一篇
2008年,当汤姆·普雷斯顿-沃纳(Tom Preston-Werner)、克里斯·万斯特拉斯(Chris Wanstrath)和PJ·海伊特(PJ Hyett)合作完成一个项目的时候,他们只是把它当做一个周末项目,仅此而已。 但没过多久,他们就意识到,他们的想法可能比自己所设想的要大得多,将远远超过一个周末项目的范畴: 它将改变人们编写和分享代码的方式。
深度复盘GitHub发展史:如何在短短10年内改变了人们的编程方式?
编者按:前不久,微软以75亿美元的价格收购GitHub,引发了科技行业的关注。在短短的10年内,GitHub改变了人们的编程方式。不仅让编程变得更简单,还改
-
下一篇
即使是纯小白,有了它,学习起来也十分轻松。
ChatGPT、Midjourney、Stable Diffusion等热门AI工具应有尽有。
甚至连怎么安装部署都告诉你了。
事不宜迟,赶快看看都有些什么内容吧。
从零开始,小白也能轻松上手
为了方便新手进行学习,这套教程是从提示工程的概念开始出发的。
简单来说,就是研究如何更好地给AIGC工具发出指令。
明确了提示工程的基本方法后,就可以学习具体工具的使用了。
以我们最熟悉的ChatGPT为例,作者结合具体案例进行了深度剖析。
GitHub项目免费教你提示工程,全中文教学,小白也能懂
克雷西发自凹非寺