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

我可以用Lucene索引源代码吗?,lucene,Lucene,我想使用Lucene索引源代码。源代码已经使用编译器插件进行了预分析。编译器的输出是源代码中显示的ID列表。每个ID都包含有关的信息 ID在中定义的模块(与中使用的相反) 显示ID的源范围(即行:列:列:列),以及 ID是在此位置定义的还是仅在此处使用的 例如,给定此源代码模块(在伪代码中) 以下是编译MyModule时编译器可能输出的内容: MyModule.foo,3:1-3:3,definition MyOtherModule.bar,4:7-4:9,use 请注意,输出中显示的所有

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

  • ID在中定义的模块(与中使用的相反)
  • 显示ID的源范围(即行:列:列:列),以及
  • ID是在此位置定义的还是仅在此处使用的
例如,给定此源代码模块(在伪代码中)

以下是编译
MyModule
时编译器可能输出的内容:

MyModule.foo,3:1-3:3,definition
MyOtherModule.bar,4:7-4:9,use
请注意,输出中显示的所有ID都是完全限定的,即使它们在源代码中可能不是这样显示的。这就是为什么我们使用编译器,它允许我们进行更精确的代码搜索,而不仅仅是基于文本的搜索

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

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


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

将各种属性放入Lucene字段可能更容易,以便您可以进行如下查询:

parse module:MyModule use:yes

这将只返回“MyModule”中使用“parse”而不是定义“parse”的“parse”的点击数。

您已经看过自定义属性了吗?
parse module:MyModule use:yes