Apache Solr - 如何索引源代码文件

时间:2016-04-04 12:52:56

标签: java apache indexing solr

我想编写一个能够在源代码文件中搜索特定模式的程序......换句话说:输入是一段代码,例如:

int fib (int i) {
  int pred, result, temp;

  pred = 1;
  result = 0;

  while (i > 0) {
    temp = pred + result;
    result = pred;
    pred = temp;
    i = i-1;
  }
  return(result);
}

输出是包含这段代码或类似代码的文件。

在开源世界中,代码在其他项目中重复使用。特别是库经常被复制到项目中。为了使bug修复更容易,我需要能够知道在哪些项目中使用了特定的库或代码。

因此我想尝试使用apache solr。我不知道这是不是一个好主意(我会对能帮到我的一切感到高兴)

我的计划是索引我的源代码文件...因此我需要一些工具?标记化源代码文件。就像给我所有函数,变量等名称一样。我可以使用输出来提供solr索引。但是我不确定apache solr中是否已经存在tokenizer或dataimporthandler这样做?

2 个答案:

答案 0 :(得分:1)

我不确定是否可以使用solr来完成,因为不同的项目可能使用不同的命名约定。

如果有帮助,请查看下面的链接:

Tools for Code Seacrh

答案 1 :(得分:0)

Apache Solr可能不是这里的最佳选择。你有更多像树/图比较问题比这里的字符串比较。我建议使用专门的工具。

如果你想手动完成,你基本上需要一个带有树遍历API的解析器或其他一些方法来获取令牌的流/树。这在很大程度上取决于您要解析的语言。如果它具有您的语言的语法,那么ANTLR之类的东西可能是一种方法。

或者,您可以从已编译的代码中提取信息(如果结构足够的话)。对于Java,ASM之类的东西可以完成这项工作。

但你仍然需要弄清楚这种表现形式。回答 - 对你自己 - 如何知道这两段代码相似的问题应该是正确的第一步。