【问题标题】:What's a good source code search engine? [closed]什么是好的源代码搜索引擎? [关闭]
【发布时间】:2010-09-11 12:12:25
【问题描述】:

我工作的代码库非常庞大,搜索它大约需要 20 分钟。我正在寻找一个好的基于 Web 的源代码搜索引擎。类似于 koders.com 的 Intranet 版本。

我发现的唯一的东西是 Krugle 企业版,它没有公布价格......如果你不得不问,你买不起。

我真的更喜欢一个普通的老式搜索引擎,没有很多其他的花里胡哨。

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

【问题讨论】:

  • 你能解释一下具体的目标是什么,例如您自己的 sourceforge 代码,还是需要扩展查看器?主要使用的是search/grep吗?你期望“找到”什么。我简要地查看了编码器,但我无法(真的)想象公司的用例,因此提出了这个问题。
  • 您将代码库存储在哪里?如果每个人都有一个签出的本地副本(就像现代 VCS 中应该发生的那样),它应该会运行得非常快。如果您正在使用 NFS,则搜索代码库的速度只能与通过 LAN 传输整个内容的速度一样快。
  • @David: ...如果您在搜索时坚持阅读每个文件的文本。如果您首先索引文件,则无需扫描文本,并且速度会快很多。看我的回答。
  • 您可能会看看一个名为 elasticsearch.org 的产品,它是一个更通用的可扩展搜索引擎,也可能恰好是一个相当不错的源搜索解决方案。
  • 您可能还注意到,Krugle 有一个非常明确的免费版本,它可以索引高达 1GB 的源代码。似乎 1GB 应该让大多数小型团队忙碌一段时间! :-)

标签: development-environment search-engine code-search-engine


【解决方案1】:

我以前用过 OpenGrok,对它很满意。 另一种选择是:

宫嘴 http://gonzui.sourceforge.net/screenshots.html


(来源:sourceforge.net

【讨论】:

    【解决方案2】:

    我推荐OpenGrok。还有一些其他的引擎,here 是对它们的快速回顾。

    【讨论】:

      【解决方案3】:

      请参阅我们的SD Source Code Search Engine。语言感知和处理多种语言(C、C++、C#、Java、ObjectiveC、PHP、VB.net、VB6、Ada、Fortran、COBOL 等)。在 Linux 内核中搜索需要 2.8 秒(730 万行,18000 多个文件)。

      因为它是语言感知的,它可以忽略与您的搜索无关的语言元素(例如,如果您只对标识符或表达式感兴趣,则忽略 cmets、格式和空格)。它可以在标识符、字符串和 cmets 中进行搜索。如果你真的想这样做,它有一个完整的正则表达式字符串搜索选项。

      它已被用于包含数千万行代码的系统,在我们所知道的一种情况下,系统包含超过一百万个文件。

      【讨论】:

        【解决方案4】:

        我遇到了类似的问题。我在一家软件公司工作,该公司的项目涉及 c#、c++、asp.net、db 脚本甚至 vb6 源代码(是的,当没有像更高版本的 Visual Studio 那样的解决方案概念时,编译多个 vb6 项目是一件令人头疼的事情。 ..)

        我一直在使用 Visual Studio 2010,但不得不使用 3rd 方文本编辑器来搜索 db 脚本和 vb6 源代码。

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            在 Linux 上,我使用 GNU ID Utils 这些功能与 grep 类似,但使用索引工作,因此速度非常快。您运行 mkid 来创建一个索引,然后运行其他实用程序之一,例如“gid”,它是 grep 的 ID 工具版本,用于跨索引进行 grep。我有一个偶尔运行 mkid 的 cron 作业。

            ID 工具也可以在 Windows 上运行,可以使用 cygwin 或 standard windows program

            【讨论】:

              【解决方案7】:

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

              ctags 之类的工具将索引和搜索 C# 和 JavaScript 代码库(以及许多其他代码库)。

              ctags 的巧妙之处在于它可以与 vim 结合使用 taglist 插件以允许源代码浏览,或与 vim omnicomplete 结合以启用代码完成。

              【讨论】:

                【解决方案8】:

                20分钟太离谱了!这些天我正在使用超过一百万行的源代码库,并且 grepping 最多需要几秒钟(我使用 ack)。我们的主目录存储在文件服务器上并安装在 NFS 上,为了加快 grepping,我们在登录到文件服务器时执行此操作。我不确定它会占用 NFS 多长时间,但肯定会更长。

                出于同样的性能原因,我们还在登录到文件服务器时进行源代码控制操作。

                【讨论】:

                • ack 很棒。您可能会在不到一个小时的时间内组装一个基本的 Web 前端。
                【解决方案9】:

                也许您应该在支持符号标记的编辑器或 IDE 上投入一些时间和/或金钱。您只需遍历整个源代码树即可对其进行标记,然后编辑器使用索引搜索或映射查找来查找符号定义或引用。

                一些支持标记的编辑器或 IDE 示例包括 Eclipse、Visual Studio、SlickEdit。一些 IDE 可能会调用符号浏览器或类似的功能。

                【讨论】:

                • 这种方法是否适用于未编译的代码,如 ASPX 或 Javascript 文件?代码 cmets 是否可搜索?我们真的需要全文搜索。
                • 哇,4.3 年后仍然收到反对票。如果我今天写这个答案,我会改变语气。现在重读,原来的答案听起来有点说教。
                • 最近我使用 Sublime Text,它为我在过去一年中使用过的每种语言(Java、Groovy、Clojure、Javascript、CSS、Haskell、R)提供了语法高亮工具,以及一个健康的社区的用户和插件开发人员。它还可以突出显示 ASP,并且有人为ASPX 提供了一个有用的调整。全文搜索(是的,cmets 也是)非常快,您可以在编辑器中搜索多个项目。我与 ST 没有任何关系;我只是一个快乐的付费客户。
                【解决方案10】:

                如果您有这么多源代码,您可能需要花费一些时间来设置搜索引擎以对其进行索引。我会推荐 Lucene - 它免费、速度快,对于任何有编程经验的人来说,为任何内容建立强大的索引非常容易。

                http://lucene.apache.org/

                【讨论】:

                • 我希望有一个很好的收缩包装解决方案。但如果我们找不到,我们最终可能会围绕 Lucene 或类似工具构建一个搜索引擎。
                • 是的 - 我假设你真的有大量的代码 - 我们处理大约 100 万行代码,并发现它可以在良好的现代 IDE(例如 Intelli-J)中充分处理功能强大的桌面,只要将内容分解为模块即可。
                【解决方案11】:

                Lxr 在大型代码库上表现出色,linux kernel 证明了这一点。我认为它仅适用于 C(您没有指定使用的语言)。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2010-09-13
                  • 1970-01-01
                  • 2013-02-23
                  • 2013-05-13
                  • 1970-01-01
                  • 2010-11-29
                  • 2012-10-09
                  • 1970-01-01
                  相关资源
                  最近更新 更多