我可以使用Lucene索引源代码吗?

时间:2013-04-11 20:31:39

标签: lucene

我想使用Lucene索引源代码。源代码已经使用编译器插件进行了预分析。编译器的输出是源代码中出现的ID列表。每个ID都包含有关

的信息
  • ID定义的模块(与使用相反),
  • 出现ID的源跨度(即line:col-line:col)和
  • ID是在此位置定义还是仅在此处使用。

例如,给定此源代码模块(伪代码)

module MyModule
from MyOtherModule import bar
foo = ...
print bar

这是编译器在编译MyModule时可能输出的内容:

MyModule.foo,3:1-3:3,definition
MyOtherModule.bar,4:7-4:9,use

请注意输出中显示的所有ID都是完全限定的,即使它们可能不会在源中显示。这就是我们使用编译器的原因,它允许我们进行更精确的代码搜索,而不仅仅是基于文本的搜索。

问题:是否可以编写自定义标记生成器和分析器,以元数据的方式(即完全限定的ID以及是否在以下位置定义或使用ID)索引上面显示的编译器输出在对文件进行评分时,它是否可用?

更准确地说,我希望每个术语与定义它的模块相关联(例如foo将具有关联的元数据:defined module = MyModule)。我希望发布列表中的每个帖子都能存储ID的特定外观是定义还是使用该ID。

此外,我想让Lucene将非限定ID存储为限定ID的同义词。这将允许用户搜索“foo”并检索包含ID“Module1.foo”和“Module2.foo”的所有文档。

1 个答案:

答案 0 :(得分:2)

将各种属性放入Lucene字段可能更容易,因此您可以查询:

parse module:MyModule use:yes

只返回“MyModule”中“解析”的点击,其中使用了'parse'而非定义。