什么是好用的源代码搜索引擎?

22

我所工作的代码库非常庞大,使用grep搜索需要约20分钟。我正在寻找一个好的基于web的源代码搜索引擎..像koders.com的企业内部版本。

我唯一发现的是Krugle Enterprise Edition,但它没有发布价格...如果你必须询问价格,那么你承受不起。

我真的更喜欢一个普通的搜索引擎,没有太多其他的花哨功能。

源代码主要是ASP.NET/C#和Javascript。


你能解释一下确切的目标是什么吗?例如,您自己的代码SourceForge,还是需要一个扩展的查看器?主要用途是搜索/ grep 吗?您期望“找到”什么?我简要地查看了 Coders,但无法真正想象出公司使用案例,因此提出了这个问题。 - Till
你的代码库存储在哪里?如果每个人都有一个已检出的本地副本(这应该是现代版本控制系统中的常态),那么速度应该很快。如果你正在使用NFS,你只能以你的局域网传输速度搜索整个代码库。 - David Thornley
@David:如果你坚持在搜索时阅读每个文件的文本,那么会很慢。如果你先对文件进行索引,就不需要扫描文本,速度会快得多。请看我的回答。 - Ira Baxter
你可以看一下一个叫做http://www.elasticsearch.org/的产品,它是一个更通用的可扩展搜索引擎,也可能成为一个相当不错的源代码搜索解决方案。 - Norman H
您可能还注意到,Krugle有一个非常明确的免费版本,可以索引高达1GB的源代码。看起来1GB应该能让大多数小团队忙碌一段时间! :-) - Norman H
11个回答

9

我推荐使用OpenGrok。还有其他一些搜索引擎,这里是它们的简要评论。


6

20分钟太长了!我现在正在处理一个超过一百万行的源代码库,使用 ack 进行 grep 操作最多只需要几秒钟。我们的家目录存储在文件服务器上,并通过 NFS 挂载,为了加速 grep 操作,我们在文件服务器上登录执行。我不确定通过 NFS 需要多长时间,但肯定更长。

出于同样的性能原因,我们也会在文件服务器上登录执行源代码控制操作。


ack很棒。你可能只需要不到一个小时就能拼凑出一个基本的Web前端。 - Thomas

3
在Linux上,我使用GNU ID Utils。它们具有类似于grep的功能,但是从索引中工作,因此非常快速。您可以运行mkid创建索引,然后使用其他实用程序之一(例如“gid”,这是grep的ID Tools版本)在索引中进行grep。我有一个定时运行mkid的cron作业。
ID工具在Windows上也可以使用,可以使用cygwin或作为标准Windows程序

2

Lxr 在处理大型代码库时表现良好,正如在linux内核中所证明的那样。我认为它仅适用于C语言(您没有指定使用的语言)。


1

1
如果你有这么多的源代码,你可能需要花点时间设置一个搜索引擎来索引它。我建议使用Lucene - 它是免费的,快速的,并且对于任何具有编程经验的人来说,设置强大的索引相当容易。

http://lucene.apache.org/


我本来希望能找到一个完美的封装解决方案。但如果我们找不到,我们可能会围绕Lucene或类似的工具构建一个搜索引擎。 - toohool
是的 - 我假设你确实有大量的代码 - 我们处理约100万行,发现只要将事物分解成模块,在强大的桌面计算机上使用良好的现代IDE(例如Intelli-J)就可以足够地处理。 - Peter

1

既然你说“grepping”,我想你对命令行解决方案并不反感。

ctags这样的工具可以索引和搜索C#和JavaScript代码库(以及许多其他语言)。

ctags非常棒的一点是它可以与vim结合使用,可以使用taglist插件进行源代码浏览,或者使用vim omnicomplete启用代码完成功能。


1

我已经使用cs2project一段时间了,它是一个基于Lucene.NET的开源C#代码搜索引擎。不幸的是,它已经不再继续开发了。


0

请查看我们的SD源代码搜索引擎。它能够识别多种语言(C、C++、C#、Java、ObjectiveC、PHP、VB.net、VB6、Ada、Fortran、COBOL等),并且具有语言感知功能。在Linux内核(730万行,18000多个文件)中进行搜索只需要2.8秒。

由于它具有语言感知功能,因此可以忽略与您的搜索无关的语言元素(例如,如果您只对标识符或表达式感兴趣,则可以忽略注释、格式和空格)。它可以搜索标识符、字符串和注释。如果您确实想这样做,它还具有完整的正则表达式字符串搜索选项。

它已被用于数千万行代码的系统中,并且在我们所知道的一个案例中,它被用于拥有超过一百万个文件的系统中。


0

我曾经遇到过类似的问题。我在一家软件公司工作,项目涉及c#、c ++、asp.net、db脚本甚至vb6源代码(是的,在没有解决方案概念的情况下编译多个vb6项目确实很头疼...)

我一直在使用Visual Studio 2010,但必须使用第三方文本编辑器来搜索db脚本和vb6源代码。

我做了一些研究,发现了KodeEx(http://kodeex.com),并对其感到满意。它是一种基于索引的源代码搜索工具。您不需要构建任何东西(就像其他人建议您使用Lucene一样。顺便说一句,Lucene是一个不错的开源项目=))。只需安装它并让它索引您的项目。之后,它通常会在几秒钟内返回结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接