还记得 GitHub 发布的新版代码搜索引擎吗?
(资料图片)
最新版搜索引擎,不仅解决了之前搜代码时 " 驴唇不对马嘴 " 的情况,还可以直接用正则表达式搜索;此外也解决了部分项目上传后搜不到等问题……
网友们看完技术原理后感到惊喜:
这真不错!我看到了谷歌代码搜索引擎的影子。
其实我知道,很少有做代码搜索引擎的人愿意去 GitHub,但很高兴能看到这一功能将变得更好用。
有不少用户直接自己找了更好用的代码搜索引擎,专门搜索想要的代码:
基于 Rust 语言的搜索引擎
GitHub 新版代码搜索引擎名叫 Blackbird,它的关键在于重新构建了一个索引。
这里主要实现两类索引,包括正向索引(Forward index)和反向索引(Inverted index)。
简单来说,正向索引指先给数据库中的各种内容编号(ID),然后通过这些内容 ID 来搜索对应的具体内容:
反向索引即通过内容中关键词,直接搜到对应的内容 ID,从而立刻定位到对应的内容。
这种方法怎么理解?
以 limits 这个字符串为例,如果 ngram 中的 n=3,那么我们就可以将它分为 lim、imi、mit、its 四个子字符串。
但 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 新版搜索引擎依旧不好用,它从来不区分符号的定义和使用,有时候搜出来的结果,往往需要往后翻 5 页左右,才能找到想要的结果。
新版代码搜索引擎申请试用:
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
关键词: 搜索引擎