我想用Lucene索引源代码。源代码已经使用编译器插件进行了预分析。编译器的输出是源代码中出现的in列表。每个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
将具有相关的元数据:定义module=MyModule
)。我希望公告列表中的每个帖子都存储ID的这个特定外观是定义还是使用该ID。
此外,我希望Lucene将非限定ID存储为限定ID的同义词,这将允许用户搜索"foo“并检索包含ID "Module1.foo”和"Module2.foo“的所有文档。
发布于 2014-01-21 23:22:07
将各种属性放入Lucene字段可能更容易,这样您就可以进行如下查询:
parse module:MyModule use:yes
它只会返回“MyModule”中的“解析”,其中使用的是“解析”,而不是定义的。
https://stackoverflow.com/questions/15958326
复制相似问题