2013-04-11 54 views
1

我想索引使用Lucene的源代碼。源代碼已經使用編譯器插件進行了預分析。編譯器的輸出是出現在源代碼中的ID列表。每個ID包括關於我可以使用Lucene索引源代碼嗎?

  • 的ID在定義(相對於所用)的模塊,其中ID出現(即行:COL-線: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將具有關聯的元數據:定義模塊= MyModule)。我希望發佈列表中的每個帖子都可以存儲此ID的特定外觀是該定義還是該ID的使用。

此外,我想讓Lucene存儲非合格ID作爲合格ID的同義詞。這將允許用戶搜索「foo」並檢索包含ID「Module1.foo」和「Module2.foo」的所有文檔。

+0

你已經看過自定義屬性了嗎? – mschonaker 2013-04-12 17:50:09

回答

2

它可能更容易把各種屬性到Lucene的領域,這樣就可以查詢,如:

parse module:MyModule use:yes 

這將只返回擊中其中「解析」被使用,而在「MyModule的」解析'比定義。

相關問題